Python設(shè)計(jì)模式編程中Adapter適配器模式的使用實(shí)例
將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
應(yīng)用場景:希望復(fù)用一些現(xiàn)存的類,但是接口又與復(fù)用環(huán)境要求不一致。
模式特點(diǎn):將一個(gè)類的接口轉(zhuǎn)換成為客戶希望的另外一個(gè)接口。
分類:類適配器(通過多重繼承)、對象適配器。
來通過例子說明,下面是用戶通過適配器使用一個(gè)類的方法
class Target: def Request(): print "common request." class Adaptee(Target): def SpecificRequest(self): print "specific request." class Adapter(Target): def __init__(self,ada): self.adaptee = ada def Request(self): self.adaptee.SpecificRequest() if __name__ == "__main__": adaptee = Adaptee() adapter = Adapter(adaptee) adapter.Request()
類圖:
實(shí)例:
我們再來看一個(gè)簡單的Adapter例子
#encoding=utf-8 # #by panda #適配器模式 def printInfo(info): print unicode(info, 'utf-8').encode('gbk') #球員類 class Player(): name = '' def __init__(self,name): self.name = name def Attack(self,name): pass def Defense(self): pass #前鋒 class Forwards(Player): def __init__(self,name): Player.__init__(self,name) def Attack(self): printInfo("前鋒%s 進(jìn)攻" % self.name) def Defense(self,name): printInfo("前鋒%s 防守" % self.name) #中鋒(目標(biāo)類) class Center(Player): def __init__(self,name): Player.__init__(self,name) def Attack(self): printInfo("中鋒%s 進(jìn)攻" % self.name) def Defense(self): printInfo("中鋒%s 防守" % self.name) #后衛(wèi) class Guards(Player): def __init__(self,name): Player.__init__(self,name) def Attack(self): printInfo("后衛(wèi)%s 進(jìn)攻" % self.name) def Defense(self): printInfo("后衛(wèi)%s 防守" % self.name) #外籍中鋒(待適配類) #中鋒 class ForeignCenter(Player): name = '' def __init__(self,name): Player.__init__(self,name) def ForeignAttack(self): printInfo("外籍中鋒%s 進(jìn)攻" % self.name) def ForeignDefense(self): printInfo("外籍中鋒%s 防守" % self.name) #翻譯(適配類) class Translator(Player): foreignCenter = None def __init__(self,name): self.foreignCenter = ForeignCenter(name) def Attack(self): self.foreignCenter.ForeignAttack() def Defense(self): self.foreignCenter.ForeignDefense() def clientUI(): b = Forwards('巴蒂爾') m = Guards('麥克格雷迪') ym = Translator('姚明') b.Attack() m.Defense() ym.Attack() ym.Defense() return if __name__ == '__main__': clientUI();
相關(guān)文章
pyecharts繪制時(shí)間輪播圖柱形圖+餅圖+玫瑰圖+折線圖
這篇文章主要介紹了pyecharts繪制時(shí)間輪播圖柱形圖+餅圖+玫瑰圖+折線圖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06Python面試不修改數(shù)組找出重復(fù)的數(shù)字
這篇文章主要為大家介紹了不修改數(shù)組找出重復(fù)的數(shù)字Python實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python實(shí)現(xiàn)將HTML轉(zhuǎn)換成doc格式文件的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)將HTML轉(zhuǎn)換成doc格式文件的方法,涉及Python htmlparser及docx模塊的相關(guān)使用技巧,需要的朋友可以參考下2017-11-11利用jupyter網(wǎng)頁版本進(jìn)行python函數(shù)查詢方式
這篇文章主要介紹了利用jupyter網(wǎng)頁版本進(jìn)行python函數(shù)查詢方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04用python實(shí)現(xiàn)操縱mysql數(shù)據(jù)庫插入
大家好,本篇文章主要講的是用python實(shí)現(xiàn)操縱mysql數(shù)據(jù)庫插入,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01解決python調(diào)用matlab時(shí)的一些常見問題
這篇文章主要介紹了解決python調(diào)用matlab時(shí)的一些常見問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03使用Python?matplotlib繪制簡單的柱形圖、折線圖和直線圖
Matplotlib是Python的繪圖庫, 它可與NumPy一起使用,提供了一種有效的MatLab開源替代方案,下面這篇文章主要給大家介紹了關(guān)于使用Python?matplotlib繪制簡單的柱形圖、折線圖和直線圖的相關(guān)資料,需要的朋友可以參考下2022-08-08