文章

HeadFirst 设计模式--适配器模式(Adapter Design Pattern)

适配器模式将一个接口转化为另外一个接口。


适配器模式将一个接口转化为另外一个接口。
需要注意:

  1. 当需要使用一个现有的类,但接口不符合你的需要时,就需要使用适配器

  2. 适配器有两种形式:对象适配器,类适配器。类适配器需要使用多重继承(java不支持)

书中通过鸭子和火鸡介绍了适配器模式:如果它走起路来像只鸭子,叫起来像只鸭子,那么它可能是一只包装了鸭子适配器的火鸡。

代码介绍了,通过类适配器,将火鸡适配为鸭子的方法


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()

核心:通过适配器类将原对象进行包装,实现了类的方法在调用的时候的重新处理。

许可协议:  CC BY 4.0