實現兩個或以上不相容介面之間的相容
某個產品已製造出來之後,需要應對新的需求,希望其仍然有效
不相容介面是他方的或者是老舊的,無法訪問其原始碼或者修改起來不切實際,並且違反開放/封閉原則。
放開/封閉原則:物件導向設計的基本原則之一,宣告乙個軟體實體應該對擴充套件是開放的,對修改則是封閉的,意味著無需修改乙個軟體實體的源**就能擴充套件其行為。
在不同國家旅行,要為手機電腦充電,需要乙個插頭介面卡,可以在不同國家使用
class
sql:
def__init__
(self,name)
: self.name = name
def__str__
(self)
:return
'the {} sql'
.format
(self.name)
defquery
(self)
:return
'query data : 123456789'
class
serial
:def
__init__
(self,name)
: self.name = name
def__str__
(self)
:return
'the {} serial'
.format
(self.name)
defread
(self)
:return
'read buff : abcdefghijklmn'
class
internet
:def
__init__
(self,name)
: self.name = name
def__str__
(self)
:return
'the {} ip address'
.format
(self.name)
defpost
(self)
:return
'post value : user = admin password = 888888'
class
adapter
:def
__init__
(self,obj,adapted_methods)
: self.obj = obj
#將特殊方法新增進介面卡中
self.__dict__.update(adapted_methods)
def__str__
(self)
:return
str(self.obj)
defmain()
: communication =
sql = sql(
'mysql'
)#由於使用者只知道乙個getdata方法,所以將各種不同方法適配到介面卡中
dict
(getdata = sql.query)))
serial = serial(
'rs485'
)dict
(getdata = serial.read)))
internet = internet(
'websocket'
)dict
(getdata = internet.post)))
#模擬使用者只呼叫getdata方法
for i in communication:
print
('{} {}'
.format
(i,i.getdata())
)if __name__ ==
"__main__"
: main(
)
Python設計模式 介面卡模式
基於python3.5.2,如下 coding utf 8 class acpnstaff name id phone def init self,id self.id id defgetname self print a protocol getname method id s self.id r...
python 設計模式 介面卡模式
介面卡模式 adapter pattern 是一種結構型設計模式,幫助我們實現兩個不相容的介面之前的相容 樣例 電子商務系統支援不同國家的貨幣交易,需要乙個介面卡,將其餘的貨幣轉化成一種貨幣最終進行交易。設計模式一直遵從開放 封閉的原則 open close principle 開放封閉原則是物件導...
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...