python 设计模式-适配器模式

适配器模式(Adapter pattern):是一种结构型设计模式,帮助我们实现两个不兼容的接口之前的兼容;样例:电子商务系统支持不同国家的货币交易,需要一个适配器,将其余的货币转化成一种货币最终进行交易。

设计模式一直遵从开放/封闭的原则(open/close principle),开放封闭原则是面向对象设计的的基本原则之一,声明一个软件实体应该对扩展是开放的,对修改则是封闭的

对于一些老旧代码进行重构这个有点不现实,对于一些厂商提供统一的接口,这个想修改原厂商的代码进行适配,这个更不切实际,所以适配器模式应运而生。

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'

    def get(self):
        """ 多余添加的方法 """
        return 'get a apple'


class Human:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return '{} the human'.format(self.name)

    def speak(self):
        return 'says hello'

    def see(self):
        """ 多余添加的方法 """
        return 'see a people'


class Computer:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return 'the {} computer'.format(self.name)

    def execute(self):
        return 'executes a program'

    def view(self):
        """ 多余添加的方法 """
        return 'view a program'


class Adapter:
    def __init__(self, obj, adapted_methods):
        self.obj = obj
        # 此处只适函数方法,其余的本身属性并没有适配
        self.__dict__.update(adapted_methods)
        # 将剩余的未适配的属性一块适配,不然打印name属性就会报错
        update_wrapper(self, obj)

    def __str__(self):
        return str(self.obj)


def main():
    objects = [Computer('Asus')]
    synth = Synthesizer('mog')
    objects.append(Adapter(synth, dict(execute=synth.play, view=synth.get)))
    human = Human('Bob')
    objects.append(Adapter(human, dict(execute=human.speak, view=human.see)))

    for i in objects:
        print('{} {}'.format(str(i), i.execute()))
        print('{}'.format(i.name))
        print('{}'.format(i.view()))


if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/u012089823/article/details/88184433