所謂介面卡模式是指是一種介面適配技術,它可通過某個類來使用另乙個介面與之不相容的類,運用此模式,兩個類的介面都無需改動。
存在一套舊系統,裡面包含 human 和 synthesizer 類,如下:
class
synthesizer:
def__init__
(self, name):
self.name = name
def__str__
(self):
return
'the {} synthesizer'.format(self.name)
defplay
(self):
return
'is playing an electronic song'
class
human:
def__init__
(self, name):
self.name = name
def__str__
(self):
return
'{} the human'.format(self.name)
defspeak
(self):
return
'says hello'
現在新增 computer 類如下:
class
computer:
def__init__
(self, name):
self.name = name
def__str__
(self):
return
'the {} computer'.format(self.name)
defexecute
(self):
return
'executes a program'
並且對於擴充套件系統來說,所有動作函式均使用 obj.execute() 來執行。即對於呼叫者來說,原系統的 synthesizer.play() 和 human.speak() 是不存在的,必須像呼叫 computer.execute() 一樣使用 synthesizer.execute() 和 human.execute() 來呼叫原系統中物件的執行函式。
這就是我們之前提到的場景,無法修改原系統函式,此時新系統就可以採用介面卡模式進行設計。
我們可以建立乙個 adapter 類專門用於統一介面,**如下。
class
adapter:
def__init__
(self, obj, adapted_methods):
self.obj = obj
self.__dict__.update(adapted_methods)
def__str__
(self):
return str(self.obj)
簡單來說,這裡是使用了 python 的乙個特殊語法糖 class.dict屬性,即類的內部字典。這個特殊的屬性是乙個字典,存放了這個類所包含的所有屬性,包括方法。所以這裡將傳入的類進行處理,將需要被介面卡處理的方法新增到內部字典中,生成乙個屬於這個新介面卡物件的方法。
接下來,只需要在呼叫時,對原有系統的類進行封裝,即可實現統一使用 execute() 方法執行動作了。**如下.
def
new_main
(): objects = [computer('asus')]
synth = synthesizer('moog')
human = human('bob')
for i in objects:
print('{} {}'.format(str(i), i.execute()))
print('type is {}'.format(type(i)))
執行結果如下:
the asus computer executes a program
type
is'__main__.computer'>
the moog synthesizer is playing an electronic song
type
is'__main__.adapter'>
bob the human says hello
type
is'__main__.adapter'>
Python介面卡模式
存在一套舊系統,裡面包含human和synthesizer類,如下 class synthesizer def init self,name self.name name def str self return the synthesizer format self.name defplay sel...
介面卡模式(類介面卡 物件介面卡)
做個筆記 引用 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 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...