python 最简单的实现适配器设计模式的示例


Posted in Python onJune 30, 2020

适配器设计模式是懒得改动某些代码,或者某些接口不方便改动的时候,使用一个特定的封装,一些特定的编写办法,使不同的接口可以使用同种调用方式使用。

更简单的说话则是,例如几个不同的接口 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())

结果如下:

python 最简单的实现适配器设计模式的示例

统一名称后可以再一次封装,进行统一调用(此内容不是本文内容不再赘述)。

整体代码如下:

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 适配器设计模式内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
Python使用redis pool的一种单例实现方式
Apr 16 Python
python递归查询菜单并转换成json实例
Mar 27 Python
Python简单的制作图片验证码实例
May 31 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
python @property的用法及含义全面解析
Feb 01 Python
django中send_mail功能实现详解
Feb 06 Python
Python语言的变量认识及操作方法
Feb 11 Python
pandas 对每一列数据进行标准化的方法
Jun 09 Python
Python中如何导入类示例详解
Apr 17 Python
Python对Tornado请求与响应的数据处理
Feb 12 Python
详解Python自动化之文件自动化处理
Jun 21 Python
Tensorflow--取tensorf指定列的操作方式
Jun 30 #Python
解决TensorFlow程序无限制占用GPU的方法
Jun 30 #Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 #Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 #Python
Tensorflow全局设置可见GPU编号操作
Jun 30 #Python
Python logging模块异步线程写日志实现过程解析
Jun 30 #Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
Jun 30 #Python
You might like
缅甸的咖啡简史
2021/03/04 咖啡文化
php json_encode奇怪问题说明
2011/09/27 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
js模拟弹出效果代码修正版
2008/08/07 Javascript
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
js查错流程归纳
2012/05/04 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
JS实现页面内跳转的简单代码
2017/09/03 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
Node.js+ELK日志规范的实现
2019/05/23 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
python使用Matplotlib画饼图
2018/09/25 Python
对python字典过滤条件的实例详解
2019/01/22 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
党课学习思想汇报
2014/01/02 职场文书
交通事故检查书范文
2014/01/30 职场文书
五好党支部事迹材料
2014/02/06 职场文书
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android