適配器模式

什麼是適配器模式?

將一個接口轉換成客戶須要的接口,已達到在新對象中使用之前的舊接口。屬於結構型模式,該模式主要解決對之前舊接口的兼容性。spa

UML類圖

對象適配器

'''
示例:  鍵盤PS2圓形接口轉USB接口
'''

import abc

# 目標接口


class AbsUSB(abc.ABC):
    @abc.abstractmethod
    def print(self): ...

# 之前舊接口


class AbsPS2(abc.ABC):
    @abc.abstractmethod
    def out(self): ...

# 舊對象


class KeyboardPS2(AbsPS2):
    def out(self):
        return "ps2"

# 適配器


class Adapter(AbsUSB):

    def __init__(self, ps2: AbsPS2):
        self.ps2 = ps2

    def print(self):
        '讓舊ps2接口 兼容 usb 接口'
        s = self.ps2.out()
        return s + " to usb"


if __name__ == "__main__":

    ps2 = KeyboardPS2()   # 舊對象
    usb = Adapter(ps2)    # 經過適配器把舊對象轉換成目標對象接口

    p = usb.print()

    print(p)

 

類適配器

'''
示例:  鍵盤PS2圓形接口轉USB接口
類適配器模式是採用多繼承的方式來實現
'''

import abc

# 目標接口


class AbsUSB(abc.ABC):
    @abc.abstractmethod
    def print(self): ...

# 之前舊接口


class AbsPS2(abc.ABC):
    @abc.abstractmethod
    def out(self): ...

# 舊對象


class KeyboardPS2(AbsPS2):
    def out(self):
        return "ps2"

# 適配器


class PS2AdapterUSB(AbsUSB, KeyboardPS2):

    def print(self):
        '讓舊ps2接口 兼容 usb 接口'
        s = self.out()
        return s + " to usb"


if __name__ == "__main__":

    usb = PS2AdapterUSB()    # 經過適配器把舊對象轉換成目標對象接口

    p = usb.print()

    print(p)

類適配器模式與對象適配器模式區別

類適配器是經過繼承具體類型來實現的,強行把他們耦合在一塊兒了;
對象適配器比類適配器更靈活和抽象,實現對具體類型解耦。code

推薦使用對象適配器對象

相關文章
相關標籤/搜索