Python設(shè)計模式中的結(jié)構(gòu)型適配器模式
一、適配器模式
適配器,顧名思義是一種萬能的接口,達到萬能轉(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?NumPy如何使用argsort方法進行排序
NumPy提供了各種功能強大的數(shù)組操作方法,其中之一就是argsort方法,本文將詳細介紹argsort方法的使用,以及如何在實際項目中充分利用它進行排序操作,希望對大家有所幫助2024-03-03
使用Python對IP進行轉(zhuǎn)換的一些操作技巧小結(jié)
這篇文章主要介紹了使用Python對IP進行轉(zhuǎn)換的一些操作技巧小結(jié),包括使用socket模塊里的相關(guān)函數(shù)和匿名函數(shù)實現(xiàn),需要的朋友可以參考下2015-11-11
Python開發(fā)之快速搭建自動回復(fù)微信公眾號功能
這篇文章主要介紹了Python開發(fā)之快速搭建自動回復(fù)微信公眾號功能的相關(guān)資料,需要的朋友可以參考下2016-04-04
Python的Django框架中URLconf相關(guān)的一些技巧整理
這篇文章主要介紹了Python的Django框架中URLconf相關(guān)的一些技巧整理,包括視圖配置和debug的示例等,需要的朋友可以參考下2015-07-07
python實現(xiàn)一次性封裝多條sql語句(begin end)
這篇文章主要介紹了python實現(xiàn)一次性封裝多條sql語句(begin end),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06

