欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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à)值,需要的小伙伴可以參考一下

一、適配器模式

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

適配器模式,定義一個(gè)適配器類,并且在該類中定義了適配器接口,這些適配接口能夠?qū)⒃瓉?lái)由于接口不兼容而不能在一起工作的多種類型進(jìn)行適配,使得它們能夠一同工作。

二、應(yīng)用場(chǎng)景

三、代碼示例

實(shí)體角色:

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

方式二

適配器類通過(guò)__dict__ 將需要轉(zhuǎn)化的類的方法注冊(cè)到適配器,重載 __getattr__ 使其在適配器函數(shù)查無(wú)方法的時(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python下的Softmax回歸函數(shù)的實(shí)現(xiàn)方法(推薦)

    Python下的Softmax回歸函數(shù)的實(shí)現(xiàn)方法(推薦)

    下面小編就為大家?guī)?lái)一篇Python下的Softmax回歸函數(shù)的實(shí)現(xiàn)方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Pygame實(shí)現(xiàn)小球躲避實(shí)例代碼

    Pygame實(shí)現(xiàn)小球躲避實(shí)例代碼

    大家好,本篇文章主要講的是Pygame實(shí)現(xiàn)小球躲避實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 利用Python命令行傳遞實(shí)例化對(duì)象的方法

    利用Python命令行傳遞實(shí)例化對(duì)象的方法

    最近在工作中遇到了一個(gè)問(wèn)題,需要接收啟動(dòng)腳本傳遞過(guò)來(lái)的實(shí)例化后的對(duì)象,通過(guò)在網(wǎng)上查找資料發(fā)現(xiàn)了兩個(gè)方法,文中通過(guò)實(shí)例代碼就給大家詳細(xì)介紹了這兩種方法,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-11-11
  • 約瑟夫問(wèn)題的Python和C++求解方法

    約瑟夫問(wèn)題的Python和C++求解方法

    這篇文章主要介紹了約瑟夫問(wèn)題的Python和C++求解方法,通過(guò)其示例我們也可以看出如今寫法最簡(jiǎn)潔的編程語(yǔ)言和最復(fù)雜的語(yǔ)言之間的對(duì)比:D 需要的朋友可以參考下
    2015-08-08
  • python3 讀取Excel表格中的數(shù)據(jù)

    python3 讀取Excel表格中的數(shù)據(jù)

    這篇文章主要介紹了python3 讀取Excel表格中的數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2018-10-10
  • 使用 prometheus python 庫(kù)編寫自定義指標(biāo)的方法(完整代碼)

    使用 prometheus python 庫(kù)編寫自定義指標(biāo)的方法(完整代碼)

    這篇文章主要介紹了使用 prometheus python 庫(kù)編寫自定義指標(biāo)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python計(jì)算質(zhì)數(shù)的方法總結(jié)

    Python計(jì)算質(zhì)數(shù)的方法總結(jié)

    質(zhì)數(shù)(Prime?Number)是指大于1且只能被1和自身整除的正整數(shù),計(jì)算質(zhì)數(shù)是數(shù)論中的一個(gè)經(jīng)典問(wèn)題,本文將介紹python中多種計(jì)算質(zhì)數(shù)的方法,希望對(duì)大家有所幫助
    2023-11-11
  • python 實(shí)現(xiàn)手機(jī)自動(dòng)撥打電話的方法(通話壓力測(cè)試)

    python 實(shí)現(xiàn)手機(jī)自動(dòng)撥打電話的方法(通話壓力測(cè)試)

    今天小編就為大家分享一篇python 實(shí)現(xiàn)手機(jī)自動(dòng)撥打電話的方法(通話壓力測(cè)試),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python的pandas類庫(kù)結(jié)構(gòu)參數(shù)

    Python的pandas類庫(kù)結(jié)構(gòu)參數(shù)

    pandas是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的,Pandas 納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具,需要的朋友可以參考下
    2023-07-07
  • 完美解決Python 2.7不能正常使用pip install的問(wèn)題

    完美解決Python 2.7不能正常使用pip install的問(wèn)題

    今天小編就為大家分享一篇完美解決Python 2.7不能正常使用pip install的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06

最新評(píng)論