当前位置: 首页 > news >正文

python设计模式4:适配器模式

使用适配器模式使用两个或是多个不兼容的接口兼容。在不修改不兼容代码的情况下使用适配器模式实现接口一致性。通过Adapter 类实现。

例子: 一个俱乐部类Club,艺术加被请到俱乐部在表演节目: organize_performance()

Musician类 play()  方法  Dancer 类主要是dance() 方法执行  (external.py) 

外部模块导入(adapter.py)创建一个通用的  Adapter类调整不兼容的对象。

 __init__() 方法的obj 参数是需要修改的对象,adapted_methods 是一个字典,包含与客户端调用的方法和应该调用方法匹配的键值对。

chapter04/external.py

class Musician: def __init__(self, name): self.name = namedef __str__(self): return f'the musician {self.name}' def play(self): return 'plays music' class Dancer: def __init__(self, name): self.name = name def __str__(self): return f'the dancer {self.name}' def dance(self): return 'does a dance performance' 

chapter04/adapter.py

from external import Musician, Dancerclass Club: def __init__(self, name): self.name = name def __str__(self): return f'the club {self.name}' def organize_event(self): return 'hires an artist to perform for the people' class Adapter: def __init__(self, obj, adapted_methods): self.obj = obj self.__dict__.update(adapted_methods) def __str__(self): return str(self.obj) def main(): objects = [Club('Jazz Cafe'), Musician('Roy Ayers'), Dancer('Shane Sparks')]for obj in objects:if hasattr(obj, 'play') or hasattr(obj, 'dance'):if hasattr(obj, 'play'):adapted_methods = dict(organize_event=obj.play)   # 设置调用方法统一organize_eventelif hasattr(obj, 'dance'):            adapted_methods = dict(organize_event=obj.dance)    # 设置调用方法统一organize_event# referencing the adapted object hereobj = Adapter(obj, adapted_methods)print(f' 输出 {obj} {obj.organize_event()}')  # 调用统一方法if __name__ == "__main__": main()

 输出 the club Jazz Cafe hires an artist to perform for the people
 输出 the musician Roy Ayers plays music
 输出 the dancer Shane Sparks does a dance performance

http://www.lryc.cn/news/214928.html

相关文章:

  • kubectl资源管理命令---声明式
  • IDEA使用-通过Database面板访问数据库
  • 单片机如何写好一个模块的驱动文件
  • 【C++笔记】C++多态
  • 不想改代码!这样实现Reverse Sync测量时间同步精度
  • 【webrtc】 对视频质量的码率控制的测试与探索
  • 2003 - Can‘t connect to MysQL server on ‘39.108.169.0‘ (10060 “Unknown error“)
  • Python算法——选择排序
  • 从「码农」到管理者,E人程序员的十年蜕变
  • ant Java任务的jvmargs属性和<jvmarg>内嵌元素
  • XML External Entity-XXE-XML实体注入
  • 生态扩展Spark Doris Connector
  • 构建 hive 时间维表
  • Pycharm安装jupyter和d2l
  • 虹科案例 | AR内窥镜手术应用为手术节约45分钟?
  • 纳米银线 纳米银纳米线 平均直径: 50-100nm
  • 力扣labuladong——一刷day15
  • 【开题报告】基于微信小程序的母婴商品仓储管理系统的设计与实现
  • Faraday库
  • 【原创】java+swing+mysql校园论坛管理系统设计与实现
  • endnote调整参考文献
  • chap认证带客户端IP分配案例
  • 算法笔记【8】-合并排序算法
  • 蓝桥杯每日一题2023.10.30
  • macOS M1安装wxPython报错‘tiff.h‘ file not found的解决方法
  • 多路转接之epoll
  • 删除排序链表中的重复节点II(C++解法)
  • uniapp自定义tab切换css样式、uni-forms中input下拉等标签字体、过宽、溢出样式一系列调整(附加实战举例)
  • windows server 2016-IIS静态服务器-设置详细过程
  • 不一样的编程方式 —— 协程(设计原理与汇编实现)