使用适配器模式使用两个或是多个不兼容的接口兼容。在不修改不兼容代码的情况下使用适配器模式实现接口一致性。通过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 = name
def __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文章来源:https://www.toymoban.com/news/detail-741597.html
from external import Musician, Dancer
class 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_event
elif hasattr(obj, 'dance'):
adapted_methods = dict(organize_event=obj.dance) # 设置调用方法统一organize_event
# referencing the adapted object here
obj = 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文章来源地址https://www.toymoban.com/news/detail-741597.html
到了这里,关于python设计模式4:适配器模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!