適配器模式可用作兩個(gè)不兼容接口之間的橋梁。 這種類(lèi)型的設(shè)計(jì)模式屬于結(jié)構(gòu)模式,因?yàn)榇四J浇Y(jié)合了兩個(gè)獨(dú)立接口的功能。
這種模式涉及一個(gè)類(lèi),它負(fù)責(zé)連接獨(dú)立或不兼容接口的功能。 一個(gè)現(xiàn)實(shí)的例子是讀卡器,它是存儲(chǔ)卡和筆記本電腦之間的適配器。 您將存儲(chǔ)卡插入讀卡器,將讀卡器插入筆記本電腦,以便通過(guò)筆記本電腦讀取存儲(chǔ)卡。
適配器設(shè)計(jì)模式有助于類(lèi)能在一起工作。 它根據(jù)需求將一個(gè)類(lèi)的接口轉(zhuǎn)換為另一個(gè)接口。 該模式包括一個(gè)多態(tài)性,它命名一個(gè)名稱(chēng)和多個(gè)形式。 根據(jù)收集到的要求,生成一個(gè)使用的形狀類(lèi)。
適配器模式有兩種類(lèi)型 -
現(xiàn)在讓我們看看如何實(shí)現(xiàn)適配器模式。參考以下代碼 -
class EuropeanSocketInterface:
def voltage(self): pass
def live(self): pass
def neutral(self): pass
def earth(self): pass
# Adaptee
class Socket(EuropeanSocketInterface):
def voltage(self):
return 230
def live(self):
return 1
def neutral(self):
return -1
def earth(self):
return 0
# Target interface
class USASocketInterface:
def voltage(self): pass
def live(self): pass
def neutral(self): pass
# The Adapter
class Adapter(USASocketInterface):
__socket = None
def __init__(self, socket):
self.__socket = socket
def voltage(self):
return 110
def live(self):
return self.__socket.live()
def neutral(self):
return self.__socket.neutral()
# Client
class ElectricKettle:
__power = None
def __init__(self, power):
self.__power = power
def boil(self):
if self.__power.voltage() > 110:
print "Kettle on fire!"
else:
if self.__power.live() == 1 and \
self.__power.neutral() == -1:
print "Coffee time!"
else:
print "No power."
def main():
# Plug in
socket = Socket()
adapter = Adapter(socket)
kettle = ElectricKettle(adapter)
# Make coffee
kettle.boil()
return 0
if __name__ == "__main__":
main()
執(zhí)行上面示例代碼,得到以上結(jié)果 -
說(shuō)明:代碼包括具有各種參數(shù)和屬性的適配器接口。 它包括Adaptee
和Target
接口,它實(shí)現(xiàn)所有屬性并將輸出顯示為可見(jiàn)。