介面卡模式(adapter pattern)是作為兩個不相容的介面之間的橋梁。這種型別的設計模式屬於結構型模式,它結合了兩個獨立介面的功能。
這種模式涉及到乙個單一的類,該類負責加入獨立的或不相容的介面功能。舉個真實的例子,讀卡器是作為記憶體卡和筆記本之間的介面卡。您將記憶體卡插入讀卡器,再將讀卡器插入筆記本,這樣就可以通過筆記本來讀取記憶體卡。
#介面卡模式,是在類寫好之後,不想修改原類的**的方法,!/usr/bin/env python
#encoding: utf-8
class
target(object):
defrequest(self):
'target request
'class
adaptee(object):
defspecialrequest(self):
'adaptee specialrequest
'class
adpater(object):
def__init__
(self, adpatee):
self.adpatee =adpatee
defrequest(self):
self.adpatee.specialrequest()
if__name__ == '
__main__':
objects =
a =target()
b =adaptee()
#適配介面
for obj in
objects:
obj.request()
#呼叫相同介面
比如狗類有個wangwang()的方法,貓類有個miaomiao()的方法,羊類有個miemie()的方法,現在要讓他們都叫一下,要呼叫每個類的不同方法。
寫個介面卡類,可以使貓通過介面卡類呼叫wangwang()的方法,但實際的動作是執行了貓類的miaomiao()方法裡面的**。同理羊通過介面卡類呼叫wangwang()的方法,但實際的動作是執行了羊類的miemie()方法裡面的**。
也可以讓介面卡寫乙個speak的方法,把介面卡的speak()方法重定向到狗 貓 羊各自的叫法。
#coding=utf-8
class
dog():
def__init__
(self, name):
self.name =name
defwangwang(self):
'my name is
' + self.name + '
。。。汪汪汪。。。
'def
dog_run(self):
'dog is running
'class
cat():
def__init__
(self, name):
self.name =name
defmiaomiao(self):
'my name is
' + self.name + '
。。。喵喵喵。。。
'def
cat_run(self):
'cat is running
'class
sheep():
def__init__
(self, name):
self.name =name
defmiemie(self):
'my name is
' + self.name + '
。。。咩咩。。。
'def
sheet_run(self):
'sheet is running
'class
adapter():
def__init__
(self,animal,adapted_methods):
''':type adapted_methods: dict
'''self.
__dict__
.update(adapted_methods)
defmain():
animals = [dog('旺財'
)] cat = cat('
大臉貓'
) sheep = sheep('
喜洋洋')'
wangwang
': cat.miaomiao,'
dog_run
':cat.cat_run}))
'wangwang
': sheep.miemie, '
dog_run
': sheep.sheet_run}))
for a in
animals:
a.wangwang()
a.dog_run()
''def
main2():
animals =
dog = dog('旺財'
) cat = cat('
大臉貓'
) sheep = sheep('
喜洋洋')'
main1即使標準的介面卡模式,貓和羊通過介面卡的wangwang()和dog_run()方法來實際執行各自的叫法和走法。
main2把狗和貓和羊統一通過介面卡轉換,呼叫speak()和run()方法來實際執行各自的叫法和走法。
所以為啥要介面卡,就是不想改 狗 貓 羊的原有的**。
如果是一開始,還沒開始寫貓和狗和羊類就設計的話,那就在貓 狗 羊裡面叫speak方法和run方法。如下。
這樣就無需介面卡來轉換了,也就變成了外觀模式了。
class但有的東西先發明就改不了,就像安卓手機的充電線,有的是typec有的是非typec,想要用非typec的充電線給現在的新手機充電,如果不重新換一條資料線,那必須去**買乙個轉換頭了。dog():
def__init__
(self, name):
self.name =name
defspeak(self):
'my name is
' + self.name + '
。。。汪汪汪。。。
'def
run(self):
'dog is running
'class
cat():
def__init__
(self, name):
self.name =name
defspeak(self):
'my name is
' + self.name + '
。。。喵喵喵。。。
'def
run(self):
'cat is running
'class
sheep():
def__init__
(self, name):
self.name =name
defspeak(self):
'my name is
' + self.name + '
。。。咩咩。。。
'def
run(self):
'sheet is running
'
設計模式 結構型模式 介面卡模式
抽象成績操作類 目標介面 inte ce scoreoperation 快速排序類 適配者 class quicksort public void sort int array,int p,int r public intpartition int a,int p,int r swap a,j 1,...
設計模式 結構型模式 介面卡模式
已有介面a和b,在不修改a b的情況下,a要為b所用,這個時候需要乙個中間人來承擔將a的介面封裝成為b可以使用的介面,這裡的 中間人 就是介面卡 adapter 轉換介面 coyoteadapter將tomcat 的connector和container進行解耦,connector和containe...
設計模式 結構型模式 介面卡模式
將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。角色說明 首先來說下物件介面卡模式的實現方式,就以電壓轉換為例子。現在我們需要定義乙個220v轉換成5v的介面 inte ce adapter被適配角色,一般是已存在的類,需要適配新的介面。生...