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

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

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

一、適配器模式

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

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

二、應(yīng)用場景

三、代碼示例

實(shí)體角色:

目標(biāo)接口(Target):定義提供給 Client 訪問的接口,可以是一個(gè)抽象類或接口,也可以是具體類。
待適配的類 / 適配者類(Adaptee):被適配的角色,它們已經(jīng)存在了一些接口,是 Client 希望的業(yè)務(wù)方法,這些接口需要被適配。
適配器(Adapter):作為一個(gè)轉(zhuǎn)換器,對 Adaptee Target 進(jìn)行適配。

方式一

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__}打電話")


# 待適配的類。新的手機(jī)品牌,打電話的接口與舊的 call 不一樣。
class Iphone:

? ? def dial(self):
? ? ? ? print(f"使用{self.__class__.__name__}打電話")


# 待適配的類。新的手機(jī)品牌,打電話的接口與舊的 call 不一樣。
class Chuizi:

? ? def dial(self):
? ? ? ? print(f"使用{self.__class__.__name__}打電話")


# 適配器,使得新的手機(jī)品牌打電話接口與舊的適配
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ù)查無方法的時(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è)計(jì)中的結(jié)構(gòu)型適配器模式的文章就介紹到這了,更多相關(guān)Python適配器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

中西区| 建德市| 邛崃市| 集安市| 无棣县| 晋城| 千阳县| 开化县| 习水县| 辉南县| 襄垣县| 新乡县| 友谊县| 手游| 建湖县| 新宁县| 丰原市| 永善县| 福安市| 资溪县| 乡城县| 乡城县| 聊城市| 祁门县| 石城县| 微博| 启东市| 鄄城县| 吉水县| 沂南县| 沙湾县| 肃北| 逊克县| 苏州市| 加查县| 文成县| 南川市| 新余市| 纳雍县| 包头市| 铜鼓县|