适配器模式将一个接口转化为另外一个接口。
需要注意:
- 当需要使用一个现有的类,但接口不符合你的需要时,就需要使用适配器
- 适配器有两种形式:对象适配器,类适配器。类适配器需要使用多重继承
书中通过鸭子和火鸡介绍了适配器模式:如果它走起路来像只鸭子,叫起来像只鸭子,那么它可能是一只包装了鸭子适配器的火鸡。
代码介绍了,通过适配器,将火鸡适配为鸭子的方法
from abc import ABC, abstractmethod
class Duck(ABC):
@abstractmethod
def quack(self):
pass
@abstractmethod
def fly(self):
pass
class MallardDuck(Duck):
'''
绿头鸭
'''
def quack(self):
print("Quack")
def fly(self):
print("I'm flying")
class Turkey(ABC):
@abstractmethod
def gobble(self):
pass
@abstractmethod
def fly(self):
pass
class WildTurkey(Turkey):
'''
野生火鸡
'''
def gobble(self):
print("Gobble gobble")
def fly(self):
print("I'm flying a short distance")
class TurkeyAdapter(Duck):
'''
火鸡的适配器
'''
turkey = None
def __init__(self, turkey: Turkey):
self.turkey = turkey
def quack(self):
self.turkey.gobble()
def fly(self):
# 火鸡飞的短,因此多飞几次
for i in range(0, 5):
self.turkey.fly()