第五天:結構型模式--介面卡模式
阿新 • • 發佈:2019-01-30
零、結構型模式
從現在開始就進入到了第二個模式大類結構型模式。所謂結構型模式就是處理一個系統中不同實體(例如類和物件)之間的關係,關注的是通過一種簡單的物件組合方式來創造新的功能。
常見的結構型模式有:介面卡模式、修飾器模式、外觀模式、享元模式、模型-檢視-控制器模式和代理模式
一、介面卡模式
- 什麼是介面卡模式
幫助我們實現兩個不相容的介面之間的相容
二、身邊的例子
- Iphone7/8/X/P
眾所周知在Iphone6sp以及以前型號的Iphone手機所使用的而耳機是3.5毫米的耳機,但是如果在7以後的版本上就無法使用,所以各個商家看準了商機,生產了介面卡,讓3.5毫米的耳機也能在高版本手機上使用。 - Traits
Traits是Python的第三方包,通過介面卡將沒實現的某個介面的物件轉換成已經實現了的介面。
三、什麼情況下使用
- 存在一個老的系統,需要對老系統進行擴充套件,但又要不能改動老系統
- 擴充套件一個第三方系統的組建
四、應用案例
通過一個模擬操作計算機的例子來看看介面卡模式怎麼使用
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()