python适配器模式角色_python设计模式-适配器模式
适配器模式主要解决的问题保留旧版本的接口的基础上,新开发的接口能够兼容到旧版本的系统上。其实我们重构旧版本的代码也可以实现相应功能的开发,但是这就违背的了开放与封闭原则,因此我们不会轻易去修改旧代码,除非你要重构旧版本的代码,都是通过增量式开发,同时兼容旧版本。
设计模式这东西只有在你要优化当前系统的时候才会使用到,不可能一开始全部的系统都是以设计模式的思维来维护,这样的情况下这个系统得多久才能完成。
下面举个例子来直白的了解一下适配器模式:
在这里旧版本功能就是电脑执行一个程序,新功能就是要保证其旧版本功能的基础上加入播放音乐等功能。
class Synthesizer:
def __init__(self, name):
self.name = name
def __str__(self):
return 'the {} synthesizer'.format(self.name)
def play(self):
return 'is playing an electronic song'
class Human:
def __init__(self, name):
self.name = name
def __str__(self):
return '{} the human'.format(self.name)
def speak(self):
return 'says hello'
适配的代码如下
class Computer:
def __init__(self, name):
self.name = name
def __str__(self):
return 'the {} computer'.format(self.name)
def execute(self):
return 'executes a program'
class Adapter:
def __init__(self, obj, adapted_methods):
self.obj = obj
self.__dict__.update(adapted_methods)
#self.__dict__['name']=obj.name
def __str__(self):
return str(self.obj)
运行代码
from chapter4 import adapter,external_1
def main():
objects = [adapter.Computer('Asus')]
synth = external_1.Synthesizer('moog')
objects.append(adapter.Adapter(synth, dict(execute=synth.play)))
human = external_1.Human('Bob')
objects.append(adapter.Adapter(human, dict(execute=human.speak)))
for i in objects:
print('{} {}'.format(str(i), i.name))
main()
这个是从设计模式书上摘抄过来的,书上留的一个问题是,现在Synthesizer,Human和Computer都具有相同的成员变量name,问如何修改适配器输出name
我在上面的适配器中注释部分即提供了解决方法,直接修改适配器中的__dict__成员,本来一开始想是用过重载__getattr__函数来实现属性的访问,但是你要注意到Computer类是没有对饮的obj变量的,所以你还是报错,这样是行不通的,所以最后还是修改__dict__达到成员属性变量的赋值。
python适配器模式角色_python设计模式-适配器模式相关推荐
- python适配器模式角色_Python设计模式之适配器模式原理与用法详解
本文实例讲述了Python设计模式之适配器模式原理与用法.分享给大家供大家参考,具体如下: 适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口. 下面是一个适配 ...
- python实现解释器_Python设计模式之解释器模式
解释器模式 对每个应用来说,至少有以下两种不同的用户分类. 基本用户:这类用户只希望能够凭直觉使用应用.他们不喜欢花太多时间配置或学习应用的内部.对他们来说,基本的用法就足够了. 高级用户:这些用户, ...
- python修饰器_python设计模式之修饰器模式
python设计模式之修饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. [ ] 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) [ ] 使用组合 ...
- python 命令模式_python 设计模式之命令模式
命令模式介绍: 在面向对象编程中,命令模式是概括所有方法信息的设计模式. 此模式对象包涵方法名,及其相关参数值. 命令模式是一个分类的观察者设计模式,在命令模式下,对象被概括为一个命令表单,此表单包涵 ...
- python 命令模式_python设计模式(十六):命令模式-阿里云开发者社区
"行为请求者"与"行为实现者"通常呈现一种"紧耦合".但在某些场合,比如要对行为进行"记录.撤销/重做.事务"等处理,这 ...
- Python设计模式-适配器模式
Python设计模式-适配器模式 基于Python3.5.2,代码如下 #coding:utf-8class ACpnStaff:name = ""id = "" ...
- python适配器模式角色_适配器模式(Adapter模式)详解
在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配.例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访 ...
- 简述事件接口与事件适配器的联系与区别_设计模式——适配器模式
适配器模式 适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper).适配器模式既可以作为类结构型模式,也 ...
- C++设计模式——适配器模式(对象适配器、类适配器)
http://blog.jobbole.com/109381/?winzoom=1 前言 现在的笔记本都只存在USB接口,用来口,电脑上存在的是USB接口,两者如何通信呢?可以使用USB转串口线连接电 ...
最新文章
- 全面解析 Kmeans 聚类算法(Python)
- 滴滴业务研发的精益实践
- 从源码分析DEARGUI之菜单
- keras画acc和loss曲线图
- 安卓2.2刷机包_老用户福音 努比亚为红魔电竞手机和Z17用户更新安卓9.0
- linux 常用命令01
- 本期课程已满,欢迎关注后续期次 | 临床基因组学数据分析实战助力解析Case,快速发表文章...
- 分布式技术追踪 2018年第二期
- Shiro 支持三种方式的授权
- 我与Bootstrap
- Magento 使用心得
- 【C++】常用排序算法
- 浅谈前端面向对象oop思想
- jmeter下载安装使用教程
- qemu运行linux内核很慢,bugfix: Qemu 运行 ARM Linux 5.0 必现启动死机
- 超五类和六类网线区别 什么样的网线好
- 国家医保移动支付国密算法SM2签名验签、SM4加解密测试工具
- 使用VLAN隔离虚拟机流量
- 紫罗兰永恒花园rust简谱_【口琴谱/简谱】エイミー(紫罗兰永恒花园外传主题曲)...
- Python+Turtle 魔法阵效果(简陋)
热门文章
- qhfl-9 微信模板消息推送
- 给字母保密的c语言,C语言练习题
- android怎么将editext的文本,android – 如何将文本添加到editext
- sql求平均日活_杨学峰博客 | Flask Sqlarchemy实现按日、周、月统计并图表展示
- 5点击换gif_工具:GIF动态图片制作小课堂,开课啦!
- 哈啰在分布式消息治理和微服务治理中的实践
- 架构设计 | 基于消息中间件,图解柔性事务一致性
- 阿里云成为首个通过《面向公有云模式的政务云服务》测评的厂商
- 因为阿里,他们成了“杭漂”
- 重磅!阿里开源自研语音识别模型DFSMN,准确率高达96.04%