分享

适配器模式

 软件开发组 2020-07-09

什么是适配器模式?

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

UML类图

对象适配器

复制代码

'''示例: 键盘PS2圆形接口转USB接口'''

import abc# 目标接口

class AbsUSB(abc.ABC): @abc.abstractmethod

@abc.abstractmethod

def print(self): ...# 以前旧接口

class AbsPS2(abc.ABC): @abc.abstractmethod

@abc.abstractmethod

def out(self): ...# 旧对象

class KeyboardPS2(AbsPS2):

def out(self):

return "ps2"

# 适配器

class Adapter(AbsUSB):

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

self.ps2 = ps2

def print(self):

'让旧ps2接口 兼容 usb 接口'

s = self.ps2.out()

return s + " to usb"

if __name__ == "__main__": ps2

ps2 = KeyboardPS2() # 旧对象 usb = Adapter(ps2) # 通过适配器把旧对象转换成目标对象接口

p = usb.print()

print(p)

复制代码

类适配器

复制代码

'''示例:  键盘PS2圆形接口转USB接口

类适配器模式是采用多继承的方式来实现'''

import abc# 目标接口class AbsUSB(abc.ABC): @abc.abstractmethod

@abc.abstractmethod

def print(self): ...# 以前旧接口

class AbsPS2(abc.ABC): @abc.abstractmethod

@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

usb = PS2AdapterUSB()

# 通过适配器把旧对象转换成目标对象接口

p = usb.print()

print(p)

复制代码

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

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

推荐使用对象适配器

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多