什么是适配器模式?
将一个接口转换成客户需要的接口,已达到在新对象中使用以前的旧接口。属于结构型模式,该模式主要解决对以前旧接口的兼容性。
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)
类适配器模式与对象适配器模式区别
类适配器是通过继承具体类型来实现的,强行把他们耦合在一起了;
对象适配器比类适配器更灵活和抽象,实现对具体类型解耦。
推荐使用对象适配器