1. 程式人生 > >第五天:結構型模式--介面卡模式

第五天:結構型模式--介面卡模式

零、結構型模式

從現在開始就進入到了第二個模式大類結構型模式。所謂結構型模式就是處理一個系統中不同實體(例如類和物件)之間的關係,關注的是通過一種簡單的物件組合方式來創造新的功能
常見的結構型模式有:介面卡模式修飾器模式外觀模式享元模式模型-檢視-控制器模式代理模式

一、介面卡模式

  • 什麼是介面卡模式
    幫助我們實現兩個不相容的介面之間的相容

二、身邊的例子

  • Iphone7/8/X/P
    眾所周知在Iphone6sp以及以前型號的Iphone手機所使用的而耳機是3.5毫米的耳機,但是如果在7以後的版本上就無法使用,所以各個商家看準了商機,生產了介面卡,讓3.5毫米的耳機也能在高版本手機上使用。
  • Traits
    Traits是Python的第三方包,通過介面卡將沒實現的某個介面的物件轉換成已經實現了的介面。

三、什麼情況下使用

  1. 存在一個老的系統,需要對老系統進行擴充套件,但又要不能改動老系統
  2. 擴充套件一個第三方系統的組建

四、應用案例

通過一個模擬操作計算機的例子來看看介面卡模式怎麼使用
external.py

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'

adapter.py

from .external import
Synthesizer, Human class Computer: def __init__(self, name): self.name = name def __str__(self): return 'the {} computer'.format(self.name) def execute(self): return 'executer a program' class Adapter: def __index__(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()