介面卡模式

2022-03-16 10:57:31 字數 1718 閱讀 2923

將乙個介面轉換成客戶需要的介面,已達到在新物件中使用以前的舊介面。屬於結構型模式,該模式主要解決對以前舊介面的相容性。

'''

示例: 鍵盤ps2圓形介面轉usb介面

'''import

abc#

目標介面

class

absusb(abc.abc):

@abc.abstractmethod

defprint

(self): ...

#以前舊介面

class

absps2(abc.abc):

@abc.abstractmethod

defout(self): ...

#舊物件

class

keyboardps2(absps2):

defout(self):

return

"ps2"#

介面卡class

adapter(absusb):

def__init__

(self, ps2: absps2):

self.ps2 =ps2

defprint

(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

defprint

(self): ...

#以前舊介面

class

absps2(abc.abc):

@abc.abstractmethod

defout(self): ...

#舊物件

class

keyboardps2(absps2):

defout(self):

return

"ps2"#

介面卡class

ps2adapterusb(absusb, keyboardps2):

defprint

(self):

'讓舊ps2介面 相容 usb 介面

's =self.out()

return s + "

to usb"if

__name__ == "

__main__":

usb = ps2adapterusb() #

通過介面卡把舊物件轉換成目標物件介面

p = usb.print

()

print(p)

類介面卡是通過繼承具體型別來實現的,強行把他們耦合在一起了;

物件介面卡比類介面卡更靈活和抽象,實現對具體型別解耦。

推薦使用物件介面卡

介面卡模式(類介面卡 物件介面卡)

做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...

介面卡模式 預設介面卡,類介面卡,物件介面卡

模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...

設計模式 介面卡模式 類介面卡 物件介面卡

乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...