设计模式-适配器模式-python实现

设计模式-适配器模式-python实现,第1张

设计模式-适配器模式-python实现 题外话

最近看了一下JAVA的设计模式,有点儿感触。但是平时用python用的比较多,所以想用python实现一下几个模式。欢迎大家给予指导。

# 这个网站学习资料不错,特此分享一下
http://c.biancheng.net/view/1361.html
适配器模式的理解
  • 通俗理解
    可以对应到我们生活中的数据线,笔记本电脑不能直接使用手机上的数据,但是笔记本和手机之间加上一根数据线,笔记本就能通过数据线访问手机上的数据了,此时数据线就是一个适配器。
  • 书面理解(借鉴http://c.biancheng.net/view/1361.html)
    将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
  • 开发中的场景
    假设我们环境中已经存在了一个接口,突然有一天,有个系统要调用这个接口,但是入参有些不匹配,比如下图,

  • 一个解决办法,就是我们改一下接口,判断一下limit参数,做一个类型判断,最终都转换为Int类型
    违背了开闭原则,修改了之前的代码
  • 甲方写一个接口,集成现有接口,并新加一个方法,做一个类型转换,然后再调用 现有接口
    增加了类的耦合,其实也是个办法。但是继承的时候,我们还是要关心一下已有接口类的构成,比如初始化方法等
  • 增加一个适配类,定一个给甲方爸爸的接口,接收甲方参数,和现有接口对象
试着写一下代码

# 现有查询接口
class InformationQuery:

    def __init__(self):
        pass

    def query(self, name, limit):

        print(f"name is: ${name}, limit is: ${limit} (${type(limit)})")
# 适配器抽象类
class QueryAdapter(metaclass=abc.ABCmeta):

    @abc.abstractmethod
    def query(self, name, limit):
        pass
# 适配器具体实现类(为甲方爸爸写的适配器)
class FatherAdapter(QueryAdapter):

    def __init__(self, informationQuery):
        self.informationQuery = informationQuery

    def query(self, name, limit):
        self.informationQuery.query(name, int(limit))
# 客户端类(甲方爸爸这样用)
if __name__ == "__main__":
    informationQuery = InformationQuery.InformationQuery()
    fatherAdapter: QueryAdapter = FatherAdapter.FatherAdapter(informationQuery)
    fatherAdapter.query("test", "1")

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5157158.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存