欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python適配器模式代碼實現(xiàn)解析

系統(tǒng) 1729 0

Python適配器模式,代碼,思考等

            
# -*- coding: utf-8 -*-
# author:baoshan
class Computer:
  def __init__(self, name):
    self.name = name
  def __str__(self):
    return 'the {} computer'.format(self.name)
  def execute(self):
    return 'executes a program'
class Synthesizer:
  def __init__(self, name):
    self.name = name
  def __str__(self):
    return 'the {} synthesizer'.format(self.name)
  def play(self):
    return 'is playing an electronic song'
class Human:
  def __init__(self, name):
    self.name = name
  def __str__(self):
    return '{} the human'.format(self.name)
  def speak(self):
    return 'says hello'
class Adapter:
  def __init__(self, obj, adapted_methods):
    self.obj = obj
    self.__dict__.update(adapted_methods)
def __str__(self):
    return str(self.obj)
def main():
  objects = [Computer('Asus')]
  synth = Synthesizer('moog')
  objects.append(Adapter(synth, dict(execute=synth.play)))
  human = Human('Bob')
  objects.append(Adapter(human, dict(execute=human.speak)))
  for i in objects:
    print('{} {}'.format(str(i), i.execute()))
if __name__ == '__main__':
  main()
          

代碼輸出:

            
the Asus computer executes a program
the moog synthesizer is playing an electronic song
Bob the human says hello
          

------------------------------------------------------------------------------------------

我們設(shè)法使得Human和Synthesizer類與客戶端所期望的接口兼容,且無需改變它們的源代碼。這太棒了!

這里有一個為你準(zhǔn)備的挑戰(zhàn)性練習(xí),當(dāng)前的實現(xiàn)有一個問題,當(dāng)所有類都有一個屬性name時,以下代碼會運行失敗。

            
  for i in objects:
    print('{}'.format(i.name))
          

首先想想這段代碼為什么會失敗?雖然從編碼的角度來看這是有意義的,但對于客戶端代碼來說毫無意義,客戶端不應(yīng)該關(guān)心“適配了什么”和“什么沒有被適配”這類細(xì)節(jié)。我們只是想提供一個統(tǒng)一的接口。該如何做才能讓這段代碼生效?

思考一下如何將未適配部分委托給包含在適配器類中的對象。

答案如下:

將適配器類更改如下,增加一行代碼

            
class Adapter:
  def __init__(self, obj, adapted_methods):
    self.obj = obj
    self.__dict__.update(adapted_methods)
    self.name = obj.name
  def __str__(self):
    return str(self.obj)
          

然后在main函數(shù)中獲取對應(yīng)的name,如下

            
def main():
  objects = [Computer('Asus')]
  synth = Synthesizer('moog')
  objects.append(Adapter(synth, dict(execute=synth.play)))
  human = Human('Bob')
  objects.append(Adapter(human, dict(execute=human.speak)))
  for i in objects:
    print('{} {}'.format(str(i), i.execute()))
    print('{}'.format(i.name))
if __name__ == '__main__':
  main()
          

輸出結(jié)果如下:

            
the Asus computer executes a program
Asus
the moog synthesizer is playing an electronic song
moog
Bob the human says hello
Bob
          

參考自:《精通Python設(shè)計模式》

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一级毛片一 | 国产乱码精品一区二区三区中文 | 成人午夜电影在线观看 | 色网在线| 国产精品中文在线 | 国产精品人妻一区夜夜爱 | 欧美日韩成人网 | 日本黄页网站在线观看 | 国产精品123区 | 国内精品一区二区 | 国产综合欧美 | 北岛玲亚洲一区在线观看 | 日本免费一区二区三区视频 | 国产精品毛片久久久久久 | 国产在线小视频 | 色播视频在线观看 | 午夜资源在线 | 欧美久草 | 国产精品视频第一区二区三区 | 亚洲成av | 欧美zozozo人禽交免费观看 | 国产精品久久久久久久久久久搜索 | 国产91久久精品一区二区 | 国产成人啪精品视频免费网站软件 | 日日麻批免费视频 | 天天操天天射天天爽 | 亚洲热色| 日韩在线观看免费 | 91精品久久久久久久 | 色噜噜噜噜噜在线观看网站 | 99热中文| 亚洲精品久久久一区二区三区 | 成人爽a毛片在线视频网站 婷婷色在线观看 | 久操网址 | 国内精品99 | 五月婷婷啪 | 99精品视频在线视频免费观看 | 网红和老师啪啪对白清晰 | 中文字幕 国产 | 亚洲一卡二卡在线 | 日本xxxx18高清免费 |