码迷,mamicode.com
首页 > 其他好文 > 详细

适配器模式

时间:2019-12-01 13:31:40      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:abs   apt   具体类   alt   方式   bsp   通过   nbsp   usb   

什么是适配器模式?

将一个接口转换成客户需要的接口,已达到在新对象中使用以前的旧接口。属于结构型模式,该模式主要解决对以前旧接口的兼容性。

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)

类适配器模式与对象适配器模式区别

类适配器是通过继承具体类型来实现的,强行把他们耦合在一起了;
对象适配器比类适配器更灵活和抽象,实现对具体类型解耦。

推荐使用对象适配器

适配器模式

标签:abs   apt   具体类   alt   方式   bsp   通过   nbsp   usb   

原文地址:https://www.cnblogs.com/whnba/p/11965607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!