zoukankan      html  css  js  c++  java
  • 适配器模式

    什么是适配器模式?

    将一个接口转换成客户需要的接口,已达到在新对象中使用以前的旧接口。属于结构型模式,该模式主要解决对以前旧接口的兼容性。

    UML类图

    对象适配器

    '''
    示例:  键盘PS2圆形接口转USB接口
    '''
    
    import abc
    
    # 目标接口
    
    
    class AbsUSB(abc.ABC):
        @abc.abstractmethod
        def print(self): ...
    
    # 以前旧接口
    
    
    class AbsPS2(abc.ABC):
        @abc.abstractmethod
        def out(self): ...
    
    # 旧对象
    
    
    class KeyboardPS2(AbsPS2):
        def out(self):
            return "ps2"
    
    # 适配器
    
    
    class Adapter(AbsUSB):
    
        def __init__(self, ps2: AbsPS2):
            self.ps2 = ps2
    
        def print(self):
            '让旧ps2接口 兼容 usb 接口'
            s = self.ps2.out()
            return s + " to usb"
    
    
    if __name__ == "__main__":
    
        ps2 = KeyboardPS2()   # 旧对象
        usb = Adapter(ps2)    # 通过适配器把旧对象转换成目标对象接口
    
        p = usb.print()
    
        print(p)

    类适配器

    '''
    示例:  键盘PS2圆形接口转USB接口
    类适配器模式是采用多继承的方式来实现
    '''
    
    import abc
    
    # 目标接口
    
    
    class AbsUSB(abc.ABC):
        @abc.abstractmethod
        def print(self): ...
    
    # 以前旧接口
    
    
    class AbsPS2(abc.ABC):
        @abc.abstractmethod
        def out(self): ...
    
    # 旧对象
    
    
    class KeyboardPS2(AbsPS2):
        def out(self):
            return "ps2"
    
    # 适配器
    
    
    class PS2AdapterUSB(AbsUSB, KeyboardPS2):
    
        def print(self):
            '让旧ps2接口 兼容 usb 接口'
            s = self.out()
            return s + " to usb"
    
    
    if __name__ == "__main__":
    
        usb = PS2AdapterUSB()    # 通过适配器把旧对象转换成目标对象接口
    
        p = usb.print()
    
        print(p)

    类适配器模式与对象适配器模式区别

    类适配器是通过继承具体类型来实现的,强行把他们耦合在一起了;
    对象适配器比类适配器更灵活和抽象,实现对具体类型解耦。

    推荐使用对象适配器

  • 相关阅读:
    安装部署Python开发环境
    CentOS系统常见优化
    chm文件打开无法显示
    数据库恢复技术
    视图的认识
    存储过程的认识
    error C2471: 无法更新程序数据库 ,fatal error C1083: 无法打开程序数据库文件
    ubuntu下使用aptget install下载安装文件管理
    转:[译文] 程序员的禅修之路
    数据库的两段锁协议
  • 原文地址:https://www.cnblogs.com/whnba/p/11965607.html
Copyright © 2011-2022 走看看