首页 > 其他 > 详细

适配器模式

时间:2019-12-01 13:04:09      阅读:55      评论:0      收藏:0      [点我收藏+]

什么是适配器模式?

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

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)

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

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

推荐使用对象适配器

适配器模式

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!