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 中文乱码问题深入分析
Mar 13 Python
python为tornado添加recaptcha验证码功能
Feb 26 Python
Python简单计算数组元素平均值的方法示例
Dec 26 Python
Python实现统计给定列表中指定数字出现次数的方法
Apr 11 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
对Python Pexpect 模块的使用说明详解
Feb 14 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
Python实现加密接口测试方法步骤详解
Jun 05 Python
用Python 执行cmd命令
Dec 18 Python
Python 中数组和数字相乘时的注意事项说明
May 10 Python
python 实现体质指数BMI计算
May 26 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执行速度全攻略(上)
2006/10/09 PHP
php仿discuz分页效果代码
2008/10/02 PHP
PHP 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
php 强制下载文件实现代码
2013/10/28 PHP
php编写简单的文章发布程序
2015/06/18 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
详谈javascript异步编程
2016/02/21 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
Python Selenium库的基本使用教程
2021/01/04 Python
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
自动化专业个人求职信范文
2013/12/30 职场文书
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
中班开学寄语
2014/04/04 职场文书
村级换届选举方案
2014/05/10 职场文书
毕业设计论文评语
2014/12/31 职场文书
结婚保证书
2015/01/16 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书