Python設(shè)計模式編程中Adapter適配器模式的使用實例
更新時間:2016年03月02日 11:23:42 作者:五岳
這篇文章主要介紹了Python設(shè)計模式編程中Adapter適配器模式的使用實例,一般來說適配器模式可以細分為類適配器和對象適配器模式,需要的朋友可以參考下
將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
應(yīng)用場景:希望復用一些現(xiàn)存的類,但是接口又與復用環(huán)境要求不一致。
模式特點:將一個類的接口轉(zhuǎn)換成為客戶希望的另外一個接口。
分類:類適配器(通過多重繼承)、對象適配器。
來通過例子說明,下面是用戶通過適配器使用一個類的方法
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()
類圖:

實例:
我們再來看一個簡單的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 進攻" % self.name)
def Defense(self,name):
printInfo("前鋒%s 防守" % self.name)
#中鋒(目標類)
class Center(Player):
def __init__(self,name):
Player.__init__(self,name)
def Attack(self):
printInfo("中鋒%s 進攻" % 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 進攻" % 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 進攻" % 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)文章
解決python-docx打包之后找不到default.docx的問題
今天小編就為大家分享一篇解決python-docx打包之后找不到default.docx的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
pycharm2020上部署配置AutoGPT4.0(保姆級教程)
本文主要介紹了pycharm2020上部署配置AutoGPT4.0,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06
簡單瞅瞅Python vars()內(nèi)置函數(shù)的實現(xiàn)
這篇文章主要介紹了簡單瞅瞅Python vars()內(nèi)置函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09

