最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python設(shè)計模式中的結(jié)構(gòu)型適配器模式

 更新時間:2022年02月15日 09:35:31   作者:范桂颶  
這篇文章主要介紹了Python設(shè)計中的結(jié)構(gòu)型適配器模式,適配器模式即Adapter?Pattern,將一個類的接口轉(zhuǎn)換成為客戶希望的另外一個接口,下文內(nèi)容具有一定的參考價值,需要的小伙伴可以參考一下

一、適配器模式

適配器,顧名思義是一種萬能的接口,達到萬能轉(zhuǎn)換的效果。

適配器模式,定義一個適配器類,并且在該類中定義了適配器接口,這些適配接口能夠?qū)⒃瓉碛捎诮涌诓患嫒荻荒茉谝黄鸸ぷ鞯亩喾N類型進行適配,使得它們能夠一同工作。

二、應(yīng)用場景

三、代碼示例

實體角色:

目標接口(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):
? ? # 目標接口
? ? def call(self):
? ? ? ? print(f"使用{self.__class__.__name__}打電話")

class Huawei(Mobile):
? ? # 目標接口
? ? 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)文章

最新評論

永济市| 南康市| 明光市| 高陵县| 丘北县| 民和| 油尖旺区| 丽水市| 全椒县| 汕尾市| 洛川县| 常州市| 合江县| 深州市| 合肥市| 任丘市| 偏关县| 遂平县| 余庆县| 仙居县| 屏南县| 枣庄市| 莆田市| 固安县| 海伦市| 大石桥市| 依兰县| 施甸县| 庐江县| 永兴县| 汨罗市| 吉木萨尔县| 高雄市| 侯马市| 射洪县| 利川市| 固始县| 金阳县| 张家港市| 吴旗县| 武平县|