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 = 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

复制代码
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

相关推荐
谁不学习揍谁!10 分钟前
大数据可视化看板:基于电子竞技行业数据大数据可视化分析(详细源码文档等资料)
人工智能·python·信息可视化·stylus
瞎某某Blinder1 小时前
DFT学习记录[3]:material project api使用方法 mp_api调取与pymatgen保存
java·笔记·python·学习
闲云一鹤1 小时前
UV 包管理器 - 新一代的 Python 包和环境管理神器
前端·python
reddingtons1 小时前
Magnific AI:拒绝“马赛克”?AI 幻觉重绘流,拯救 1024px 废片
图像处理·人工智能·设计模式·新媒体运营·aigc·设计师·教育电商
知无不研2 小时前
c++的设计模式(常用)
c++·观察者模式·单例模式·设计模式·简单工厂模式
DN20202 小时前
当AI开始评估客户的“成交指数”
数据结构·人工智能·python·microsoft·链表
小小张说故事2 小时前
Python图像处理利器:Pillow (PIL)入门指南
后端·python·图像识别
好家伙VCC3 小时前
**标题:发散创新|用Python构建GAN图像生成器:从理论到实战全流程解析**---在深度学习飞速发展的今天,**生成对抗
java·python·深度学习·生成对抗网络