Python設(shè)計(jì)模式編程中Adapter適配器模式的使用實(shí)例
將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
應(yīng)用場(chǎng)景:希望復(fù)用一些現(xiàn)存的類,但是接口又與復(fù)用環(huán)境要求不一致。
模式特點(diǎn):將一個(gè)類的接口轉(zhuǎn)換成為客戶希望的另外一個(gè)接口。
分類:類適配器(通過多重繼承)、對(duì)象適配器。
來(lái)通過例子說(shuō)明,下面是用戶通過適配器使用一個(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í)例:
我們?cè)賮?lái)看一個(gè)簡(jiǎn)單的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)文章
解決python-docx打包之后找不到default.docx的問題
今天小編就為大家分享一篇解決python-docx打包之后找不到default.docx的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-02-02
pycharm2020上部署配置AutoGPT4.0(保姆級(jí)教程)
本文主要介紹了pycharm2020上部署配置AutoGPT4.0,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
python和php學(xué)習(xí)哪個(gè)更有發(fā)展
在本篇內(nèi)容里小編給大家分析了關(guān)于python和php學(xué)習(xí)哪個(gè)更有發(fā)展相關(guān)論點(diǎn),有興趣的朋友們參考下。2020-06-06
Python高階函數(shù)map()?簡(jiǎn)介和使用詳解
map()?函數(shù)是Python中的內(nèi)置函數(shù),這個(gè)函數(shù)又叫做映射函數(shù),其實(shí)里面具有一個(gè)迭代器的功能,會(huì)依次遍歷可迭代對(duì)象進(jìn)行相關(guān)的操作,這篇文章主要介紹了Python高階函數(shù)map()?簡(jiǎn)介和使用詳解,需要的朋友可以參考下2023-03-03
簡(jiǎn)單瞅瞅Python vars()內(nèi)置函數(shù)的實(shí)現(xiàn)
這篇文章主要介紹了簡(jiǎn)單瞅瞅Python vars()內(nèi)置函數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

