已解决
python设计模式4:适配器模式
来自网友在路上 168868提问 提问时间:2023-11-02 12:06:05阅读次数: 68
最佳答案 问答题库688位专家为你答疑解惑
使用适配器模式使用两个或是多个不兼容的接口兼容。在不修改不兼容代码的情况下使用适配器模式实现接口一致性。通过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
查看全文
99%的人还看了
相似问题
- Kotlin学习——kt里的集合,Map的各种方法之String篇
- Office文件在线预览大全-Word文档在线预览的实现方法-OFD文档在线预览-WPS文件在线预览
- composer切换全局镜像源的方法
- Python通过selenium调用IE11浏览器报错解决方法
- 测试用例的设计方法(全):正交实验设计方法|功能图分析方法|场景设计方发
- Java8新特性 ----- Lambda表达式和方法引用/构造器引用详解
- C#中抽象类、抽象方法和接口暨内联临时变量的精彩表达
- ChatGLM2 大模型微调过程中遇到的一些坑及解决方法(更新中)
- 类方法,静态方法和实例方法的区别及应用场景
- 【链表的说明、方法---顺序表与链表的区别】
猜你感兴趣
版权申明
本文"python设计模式4:适配器模式":http://eshow365.cn/6-30153-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: pytorch复现_NMS
- 下一篇: 数字孪生技术:金融业合规与自动化的未来