結構型模式 介面卡模式

2021-09-22 02:28:54 字數 2450 閱讀 4777

介面卡模式(

adapter pattern

)是用來實現不相容介面之間的轉換媒介,例如想把舊元件用於新系統或把新元件用於老系統中,一般若不對**進行任何修改使兩者就能夠通訊的情況則很少見,但修改**又不切實際或可能無法直接訪問這些**(

*元件是第三方以外部庫方式提供),此時可編寫乙個額外的**層來讓新舊介面之間能夠互動通訊,這個**層就是介面卡。

示例:

class synthesizer:

def __init__(self, name):

self.name = name

def __str__(self):

return 'the {} synthesizer'.format(self.name)

def play(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)

def speak(self):       #主要動作之方法

return 'says hello'

class computer:

def __init__(self, name):

self.name = name

def __str__(self):

return 'the {} computer'.format(self.name)

def execute(self):   #提供客戶端呼叫之介面

return 'executes a program'

客戶端僅知道可呼叫computer類之execute()方法,但並不知道synthesizer 類之play()和human類之speak()等方法,在不改變synthesizer和human類的前提下,思考該如何做才能使**仍然可有效運作?此時介面卡就是最佳的解決方案,可建立乙個如下通用的adapter類,將一些不同介面的物件適配到統一介面中,其中在__init__()方法的obj引數是指定要適配的物件,execute是指定客戶端方法要轉呼叫適配物件的方法名稱,kwargs是指定要傳遞引數給適配物件之隱性dict)。

class adapter:

def __init__(self,obj,execute=none,**kwargs):

self.obj = obj

self.execute = execute

self.__dict__.update(kwargs)           #

每個物件被建立後即會具有

例項名.__dict__之隱性

dict

def __str__(self):

return str(self.obj)

def main():

objects = [computer('asus')]             #可在構建物件時直接塞入list中,之後便可對此集合直接作增刪

synth = synthesizer('moog')

human = human('bob')

for i in objects:         #注:objects是儲存物件之list集合

print('{} {}'.format(str(i),i.execute()))      #

客戶端全部以

execute()

方法作呼叫

for i in objects:

print(i.name)

實際業務邏輯之場景:

if __name__ == "__main__":

main()

輸出:

the asus computer executes a program

the moog synthesizer is playing an electronic song

bob the human says hello

asus

moog

bob總結

使用介面卡模式可讓不相容介面可一致性獲得相容以互動通訊,此模式可實現在無需修改原不相容模型的原始碼而能獲得介面的一致性之相關工作,雖然在

python

中可沿襲傳統之繼承方式利用子類來實現目的,但這個技術是最佳的替代方案。

結構型模式 介面卡模式

介面卡模式 將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。介面卡模式角色目標 targe 角色 該角色定義要轉換成的目標介面 源 adaptee 角色 需要被轉換成目標角色的源角色 介面卡 adapter 角色 該角色是介面卡模式的核心,...

結構型模式 介面卡模式

將乙個類 adaptee 的介面轉換成客戶 client 希望的另外乙個介面 target 為什麼要適配 須要的東西已做好,可是不能用。短時間又不能改造。想辦法適配它。使得原本因為介面不相容而不能一起工作的那些類能夠一起工作。姚明說漢語,其它隊員和教練說英語,他們不能溝通交流。團隊就不能非常好地合作...

結構型模式 介面卡模式

目錄 1.概述 1.1 定義 1.2 作用 1.3 應用場景 2.類圖 2.1 類介面卡模式類圖 2.2 物件介面卡模式類圖 3.角色 4.例項 4.1 類介面卡 4.2 物件介面卡 5.3 兩者的區分 5.優缺點 5.1 優點 5.2 缺點 也可以作為物件結構型模式。介面卡模式可以將乙個類的介面和...