最近看了一下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")
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)