[Python设计模式] 第17章 程序中的翻译官——适配器模式
github地址:https://github.com/cheesezh/python_design_patterns
適配器模式
適配器模式,將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作[DP]。
當(dāng)系統(tǒng)的數(shù)據(jù)和行為都正確,但是接口不符時(shí),我們應(yīng)該考慮使用適配器模式,目的就是使控制范圍之外的一個(gè)原有對(duì)象與某個(gè)接口匹配。適配器模式主要應(yīng)用于希望復(fù)用一些現(xiàn)存的類,但是接口又與復(fù)用環(huán)境要求不一致的情況。
class Target():"""Target類,這是客戶所期待的接口。可以是具體或抽象的類,也可以是接口。"""def request(self):print("普通請(qǐng)求")class Adaptee():"""需要適配的類"""def specific_request(self):print("特殊請(qǐng)求")class Adapter(Target):"""適配器,通過(guò)內(nèi)部包裝一個(gè)Adaptee對(duì)象,把源接口轉(zhuǎn)換成目標(biāo)接口"""def __init__(self):self.adaptee = Adaptee()def request(self):self.adaptee.specific_request()def main():target = Adapter()target.request()main() 特殊請(qǐng)求何時(shí)使用適配器模式?
想使用一個(gè)已經(jīng)存在的類,但如果它的接口,也就是它的方法和你的要求不想同時(shí),就應(yīng)該考慮使用適配器模式。
對(duì)于公司內(nèi)部獨(dú)立開(kāi)發(fā)的系統(tǒng),類和方法名的規(guī)范應(yīng)當(dāng)在設(shè)計(jì)之初就規(guī)定好,當(dāng)接口不相同時(shí),首先不應(yīng)該考慮使用適配器,而是應(yīng)該考慮通過(guò)重構(gòu)統(tǒng)一接口。
只有在雙方都不太容易修改的時(shí)候再使用適配器模式。
但是如果設(shè)計(jì)之初,我們準(zhǔn)備使用第三方開(kāi)發(fā)組件,而這個(gè)組件的接口于我們自己的系統(tǒng)接口是不相同的,而我們也完全沒(méi)有必要為了迎合它而改動(dòng)自己的接口,此時(shí)盡管在開(kāi)發(fā)的設(shè)計(jì)階段,也就是可以考慮用適配器模式來(lái)解決接口不同的問(wèn)題。
題目
用程序模擬姚明到國(guó)外打NBA初期依賴翻譯的場(chǎng)景。
from abc import ABCMeta, abstractmethodclass Player():__metaclass__ = ABCMetadef __init__(self, name):self.name = name@abstractmethoddef attack(self):pass@abstractmethoddef defense(self):passclass Forwards(Player):def attack(self):print("Forward {} attack".format(self.name))def defense(self):print("Forward {} defense".format(self.name))class Guards(Player):def attack(self):print("Guards {} attack".format(self.name))def defense(self):print("Guards {} defense".format(self.name))class ForeignCenter():def __init__(self, name):self.name = namedef jingong(self):print("Center {} jingong".format(self.name))def fangshou(self):print("Center {} fangshou".format(self.name))class Translator(Player):def __init__(self, name):self.foreign_center = ForeignCenter(name)def attack(self):self.foreign_center.jingong()def defense(self):self.foreign_center.fangshou()forwards = Forwards("FFF") forwards.attack()guards = Guards("GGG") guards.defense()center = Translator("CCC") center.attack() center.defense() Forward FFF attack Guards GGG defense Center CCC jingong Center CCC fangshou轉(zhuǎn)載于:https://www.cnblogs.com/CheeseZH/p/9458707.html
總結(jié)
以上是生活随笔為你收集整理的[Python设计模式] 第17章 程序中的翻译官——适配器模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 中国石油大学(华东)暑期集训--二进制(
- 下一篇: 剧情介绍