栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式-适配器模式-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")
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/444343.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号