###零、结构型模式
从现在开始就进入到了第二个模式大类结构型模式***。所谓结构型模式就是处理一个系统中不同实体(例如类和对象)之间的关系,关注的是通过一种简单的对象组合方式来创造新的功能*。
常见的结构型模式有:适配器模式、修饰器模式、外观模式、享元模式、模型-视图-控制器模式***和***代理模式
###一、适配器模式
什么是适配器模式
帮助我们实现两个不兼容的接口之间的兼容
###二、身边的例子
- Iphone7/8/X/P
众所周知在Iphone6sp以及以前型号的Iphone手机所使用的而耳机是3.5毫米的耳机,但是如果在7以后的版本上就无法使用,所以各个商家看准了商机,生产了适配器,让3.5毫米的耳机也能在高版本手机上使用。
- Traits
Traits是Python的第三方包,通过适配器将没实现的某个接口的对象转换成已经实现了的接口。
###三、什么情况下使用
- 存在一个老的系统,需要对老系统进行扩展,但又要不能改动老系统
- 扩展一个第三方系统的组建
###四、应用案例
通过一个模拟操作计算机的例子来看看适配器模式怎么使用
external.py
class S
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()