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聚类算法之凝聚层次聚类实例分析
Nov 20 Python
同时安装Python2 & Python3 cmd下版本自由选择的方法
Dec 09 Python
基于python内置函数与匿名函数详解
Jan 09 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
python实现数据导出到excel的示例--普通格式
May 03 Python
python3读取excel文件只提取某些行某些列的值方法
Jul 10 Python
Python基于多线程实现ping扫描功能示例
Jul 23 Python
python实现浪漫的烟花秀
Jan 30 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 Python
pycharm如何设置官方中文(如何汉化)
Dec 29 Python
Python3.8官网文档之类的基础语法阅读
Sep 04 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
让PHP开发者事半功倍的十大技巧小结
2010/04/20 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
javascript new一个对象的实质
2010/01/07 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
pandas通过索引进行排序的示例
2018/11/16 Python
Python简单I/O操作示例
2019/03/18 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
使用python实现飞机大战游戏
2020/03/23 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
大学生大二自我鉴定
2013/10/28 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
安全承诺书范文
2014/03/26 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
首席执行官观后感
2015/06/03 职场文书
Python OpenCV快速入门教程
2021/04/17 Python
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript