將一個接口轉換成客戶須要的接口,已達到在新對象中使用之前的舊接口。屬於結構型模式,該模式主要解決對之前舊接口的兼容性。spa
''' 示例: 鍵盤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)
類適配器是經過繼承具體類型來實現的,強行把他們耦合在一塊兒了;
對象適配器比類適配器更靈活和抽象,實現對具體類型解耦。code
推薦使用對象適配器對象