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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章