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