Python設(shè)計模式中的結(jié)構(gòu)型適配器模式
一、適配器模式
適配器,顧名思義是一種萬能的接口,達(dá)到萬能轉(zhuǎn)換的效果。
適配器模式,定義一個適配器類,并且在該類中定義了適配器接口,這些適配接口能夠?qū)⒃瓉碛捎诮涌诓患嫒荻荒茉谝黄鸸ぷ鞯亩喾N類型進行適配,使得它們能夠一同工作。
二、應(yīng)用場景

三、代碼示例
實體角色:
目標(biāo)接口(Target):定義提供給 Client 訪問的接口,可以是一個抽象類或接口,也可以是具體類。
待適配的類 / 適配者類(Adaptee):被適配的角色,它們已經(jīng)存在了一些接口,是 Client 希望的業(yè)務(wù)方法,這些接口需要被適配。
適配器(Adapter):作為一個轉(zhuǎn)換器,對 Adaptee 和 Target 進行適配。
方式一
import abc
class Mobile(metaclass=abc.ABCMeta):
? ? @abc.abstractmethod
? ? def call(self):
? ? ? ? pass
class Xiaomi(Mobile):
? ? # 目標(biāo)接口
? ? def call(self):
? ? ? ? print(f"使用{self.__class__.__name__}打電話")
class Huawei(Mobile):
? ? # 目標(biāo)接口
? ? def call(self):
? ? ? ? print(f"使用{self.__class__.__name__}打電話")
# 待適配的類。新的手機品牌,打電話的接口與舊的 call 不一樣。
class Iphone:
? ? def dial(self):
? ? ? ? print(f"使用{self.__class__.__name__}打電話")
# 待適配的類。新的手機品牌,打電話的接口與舊的 call 不一樣。
class Chuizi:
? ? def dial(self):
? ? ? ? print(f"使用{self.__class__.__name__}打電話")
# 適配器,使得新的手機品牌打電話接口與舊的適配
class MobileAdapter(Mobile):
? ? def __init__(self, mobile):
? ? ? ? self.mobile = mobile
? ? def call(self):
? ? ? ? self.mobile.dial()
if __name__ == "__main__":
? ? xiaomi = Xiaomi()
? ? xiaomi.call()
? ? huawei = Huawei()
? ? huawei.call()
? ? iphone = MobileAdapter(Iphone())
? ? iphone.call()
? ? chuizi = MobileAdapter(Chuizi())
? ? chuizi.call()方式二
適配器類通過__dict__ 將需要轉(zhuǎn)化的類的方法注冊到適配器,重載 __getattr__ 使其在適配器函數(shù)查無方法的時候,執(zhí)行 getattr 方法。
class A:
? ? def a(self):
? ? ? ? print("我是A類的a方法")
class B:
? ? def b(self):
? ? ? ? print("我是B類的b方法")
class C:
? ? def c(self):
? ? ? ? print("我是C類的c方法")
class Adapter:
? ? def __init__(self, classname, method):
? ? ? ? self.classname = classname
? ? ? ? self.__dict__update = method
? ? def __getattr__(self, attr):
? ? ? ? return getattr(self.classname, attr)
def test():
? ? objects = []
? ? AA = A()
? ? objects.append(Adapter(AA, dict(test=AA.a)))
? ? BB = B()
? ? objects.append(Adapter(BB, dict(test=BB.b)))
? ? CC = C()
? ? objects.append(Adapter(CC, dict(test=CC.c)))
? ? for obj in objects:
? ? ? ? obj.test()
test()
到此這篇關(guān)于Python設(shè)計中的結(jié)構(gòu)型適配器模式的文章就介紹到這了,更多相關(guān)Python適配器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python下的Softmax回歸函數(shù)的實現(xiàn)方法(推薦)
下面小編就為大家?guī)硪黄狿ython下的Softmax回歸函數(shù)的實現(xiàn)方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
python3 讀取Excel表格中的數(shù)據(jù)
這篇文章主要介紹了python3 讀取Excel表格中的數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2018-10-10
使用 prometheus python 庫編寫自定義指標(biāo)的方法(完整代碼)
這篇文章主要介紹了使用 prometheus python 庫編寫自定義指標(biāo)的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
Python計算質(zhì)數(shù)的方法總結(jié)
質(zhì)數(shù)(Prime?Number)是指大于1且只能被1和自身整除的正整數(shù),計算質(zhì)數(shù)是數(shù)論中的一個經(jīng)典問題,本文將介紹python中多種計算質(zhì)數(shù)的方法,希望對大家有所幫助2023-11-11
python 實現(xiàn)手機自動撥打電話的方法(通話壓力測試)
今天小編就為大家分享一篇python 實現(xiàn)手機自動撥打電話的方法(通話壓力測試),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python的pandas類庫結(jié)構(gòu)參數(shù)
pandas是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的,Pandas 納入了大量庫和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具,需要的朋友可以參考下2023-07-07
完美解決Python 2.7不能正常使用pip install的問題
今天小編就為大家分享一篇完美解決Python 2.7不能正常使用pip install的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06

