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 相关文章推荐
通过C++学习Python
Jan 20 Python
python开发之函数定义实例分析
Nov 12 Python
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
Python求算数平方根和约数的方法汇总
Mar 09 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
python中的set实现不重复的排序原理
Jan 24 Python
python随机取list中的元素方法
Apr 08 Python
linux下安装python3和对应的pip环境教程详解
Jul 01 Python
Djang的model创建的字段和参数详解
Jul 27 Python
python 读取二进制 显示图片案例
Apr 24 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 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文件上传类分享
2016/05/15 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
JavaScript 基础问答三
2008/12/03 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
python实现发送和获取手机短信验证码
2016/01/15 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
利用python实现周期财务统计可视化
2019/08/25 Python
python常用排序算法的实现代码
2019/11/08 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
优秀教师先进事迹
2014/01/22 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
Python下opencv库的安装过程及问题汇总
2021/06/11 Python
Python 全局空间和局部空间
2022/04/06 Python