时间:2021-05-22
适配器设计模式是懒得改动某些代码,或者某些接口不方便改动的时候,使用一个特定的封装,一些特定的编写办法,使不同的接口可以使用同种调用方式使用。
更简单的说话则是,例如几个不同的接口 aliyun、qiniuyun、tencentyun是新增的接口,以前都是使用接口yun进行文件备份,现在每一种调用不同名都太烦,统一使用yun去进行aliyun、qiniuyun、tencentyun上传文件。这个时候就需要写一个适配器。
现在看一个简单例子,有一个类为Upload 是一个上传类,里面有一个方法是yun方法:
class Upload: def yun(self): return '...... Uploading '之后又新增了3个上传类,分别是 AliUpload、QiniuUpload、TencentUpload,如下代码:
class AliUpload: def aliyun(self): return '......aliyun Uploading 'class QiniuUpload: def qiniuyun(self): return '......qiniuyun Uploading ' class TencentUpload: def tencentyun(self): return '......tencentyun Uploading '现在我想让它们里面的yun 方法都使用统一接口名为 uploadyun,需要编写一个适配器,代码如下:
class Adapter: def __init__(self,yun,func): self.yun=yun self.__dict__.update(func)init 方法接收两个参数,一个是yun,yun是yun对象,也就是 AliUpload、QiniuUpload、TencentUpload以及Upload 的对象,还有一个是func,需要统一名称的方法字典。调用方式如下:(代码比较冗余,不过对于某一部分读者会很直观)
首先新建yun的对象:
yun_obj=Upload()aliyun_obj=AliUpload()qiniuyun_obj=QiniuUpload()tencentyun_obj=TencentUpload()随后新建适配器对象,并且把以上的对象及方法传入到适配器初始化方法中:
aptyun=Adapter(yun_obj,dict(uploadyun=yun_obj.yun))aptali=Adapter(aliyun_obj,dict(uploadyun=aliyun_obj.aliyun))aptqiniu=Adapter(qiniuyun_obj,dict(uploadyun=qiniuyun_obj.qiniuyun))apttencent=Adapter(tencentyun_obj,dict(uploadyun=tencentyun_obj.tencentyun))由于我们需要通过使用调用 uploadyun 方法名统一调用,所以键为uploadyun,之后会成为类成员变量;最后直接用适配器对象进行统一名称的方法调用:
print(aptyun.uploadyun())print(aptali.uploadyun())print(aptqiniu.uploadyun())print(apttencent.uploadyun())结果如下:
统一名称后可以再一次封装,进行统一调用(此内容不是本文内容不再赘述)。
整体代码如下:
class Upload: def yun(self): return '...... Uploading 'class AliUpload: def aliyun(self): return '......aliyun Uploading 'class QiniuUpload: def qiniuyun(self): return '......qiniuyun Uploading ' class TencentUpload: def tencentyun(self): return '......tencentyun Uploading ' class Adapter: def __init__(self,yun,func): self.yun=yun self.__dict__.update(func)#新建类yun_obj=Upload()aliyun_obj=AliUpload()qiniuyun_obj=QiniuUpload()tencentyun_obj=TencentUpload()#适配器类aptyun=Adapter(yun_obj,dict(uploadyun=yun_obj.yun))aptali=Adapter(aliyun_obj,dict(uploadyun=aliyun_obj.aliyun))aptqiniu=Adapter(qiniuyun_obj,dict(uploadyun=qiniuyun_obj.qiniuyun))apttencent=Adapter(tencentyun_obj,dict(uploadyun=tencentyun_obj.tencentyun))#统一接口调用示例print(aptyun.uploadyun())print(aptali.uploadyun())print(aptqiniu.uploadyun())print(apttencent.uploadyun())到此这篇关于python 最简单的实现适配器设计模式的示例的文章就介绍到这了,更多相关python 适配器设计模式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了PHP设计模式之适配器模式原理与用法。分享给大家供大家参考,具体如下:一、什么是适配器模式适配器模式有两种:类适配器模式和对象适配器模式。其中类适
本文深入浅出的讲述了设计模式中的适配器模式,并给出了简单的示例,例子浅显易懂,并附带源代码。 适配器模式中的有以下的四种角色:目标(target):定义客户端
适配器模式属于结构型的设计模式,它是结构型设计模式之首(用的最多的结构型设计模式)。适配器设计模式也并不复杂,适配器它是主要作用是将一个类的接口转换成客户希望的
本文实例讲述了Python设计模式之适配器模式原理与用法。分享给大家供大家参考,具体如下:适配器模式(AdapterPattern):将一个类的接口转换成为客户
本文实例讲述了Java适配器模式应用之电源适配器功能。分享给大家供大家参考,具体如下:一、模式定义存在两种适配器模式1对象适配器模式,在这种适配器模式中,适配器