什么是适配器模式?将一个接口转换成客户需要的接口,已达到在新对象中python基础教程使用以前的旧接口。属于结构型模式,该模式主要解决对以前旧接口的兼容性。 UML类图对象适配器
'''示例: 键盘PS2圆形接口转USB接口''' import abc# 目标接口 class AbsUSB(abc.ABC):
@abc.abstractmethod @abc.abstractmethod def print(self): ...# 以前旧接口 class AbsPS2(abc.ABC):
@abc.abstractmethod @abc.abstractmethod def out(self): ...# 旧对象 class KeyboardPS2(AbsPS2): def out(self): return "ps2" # 适配器 class Adapter(AbsUSB): def __init__(self, ps2: AbsPS2):
self.ps2 self.ps2 = ps2 def print(self): '让旧ps2接口 兼容 usb 接口' s = self.ps2.out() return s + " to usb" if __name__ == "__main__":
ps2
ps2 = KeyboardPS2() # 旧对象
usb = Adapter(ps2) # 通过适配器把旧对象转换成目标对象接口 p = usb.print() print(p)
类适配器
'''示例: 键盘PS2圆形接口转USB接口类适配器模式是采用多继承的方式来实现''' import abc# 目标接口class AbsUSB(abc.ABC):
@abc.abstractmethod @abc.abstractmethod def print(self): ...# 以前旧接口 class AbsPS2(abc.ABC):
@abc.abstractmethod @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 usb = PS2AdapterUSB() # 通过适配器把旧对象转换成目标对象接口 p = usb.print() print(p)
类适配器模式与对象适配器模式区别类适配器是通过继承具体类型来实现的,强行把他们耦合在一起了; 对象适配器比类适配器更灵活和抽象,实现对具体类型解耦。 推荐使用对象适配器
|