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笔记(叁)继续学习
Oct 24 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
Python下载网络小说实例代码
Feb 03 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
关于numpy数组轴的使用详解
Dec 05 Python
Python中Subprocess的不同函数解析
Dec 10 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
django自带的权限管理Permission用法说明
May 13 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
May 15 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 Python
python 实现批量图片识别并翻译
Nov 02 Python
python实现网络五子棋
Apr 11 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
福利彩票幸运号码自动生成器
2006/10/09 PHP
用PHP和ACCESS写聊天室(八)
2006/10/09 PHP
将数组写入txt文件 var_export
2009/04/21 PHP
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
Webkit的跨域安全问题说明
2011/09/13 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
URL中“#” “?” &“”号的作用浅析
2017/02/04 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
美国牛仔品牌:True Religion
2018/11/16 全球购物
高中生学习总结的自我评价范文
2013/10/13 职场文书
母亲追悼会答谢词
2014/01/27 职场文书
会计的岗位职责
2014/03/15 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
大学生作弊检讨书
2014/09/11 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
2015年科协工作总结
2015/05/19 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL