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是编译运行的验证方法
Jan 30 Python
python抓取并保存html页面时乱码问题的解决方法
Jul 01 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
使用python将大量数据导出到Excel中的小技巧分享
Jun 14 Python
对python中dict和json的区别详解
Dec 18 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
关于sys.stdout和print的区别详解
Dec 05 Python
如何基于python测量代码运行时间
Dec 25 Python
使用 Python 在京东上抢口罩的思路详解
Feb 27 Python
Python+logging输出到屏幕将log日志写入文件
Nov 11 Python
Python自动化测试PO模型封装过程详解
Jun 22 Python
Python上下文管理器Content Manager
Jun 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
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
php实现微信扫码支付
2017/03/26 PHP
页面中js执行顺序
2009/11/09 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
Python 登录网站详解及实例
2017/04/11 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
《草原》教学反思
2014/02/15 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
使用python绘制分组对比柱状图
2022/04/21 Python