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抓取网页图片示例(python爬虫)
Apr 27 Python
Python入门篇之对象类型
Oct 17 Python
理解Python中的With语句
Feb 02 Python
一张图带我们入门Python基础教程
Feb 05 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
python命令行参数用法实例分析
Jun 25 Python
详解python中的time和datetime的常用方法
Jul 08 Python
Django基础知识 URL路由系统详解
Jul 18 Python
Python Celery多队列配置代码实例
Nov 22 Python
Python的flask接收前台的ajax的post数据和get数据的方法
Apr 12 Python
Python正则表达式中flags参数的实例详解
Apr 01 Python
基于Python实现对比Exce的工具
Apr 07 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
加速XP搜索功能堪比vista
2007/03/22 PHP
PHP 用数组降低程序的时间复杂度
2009/12/04 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
PHP面向对象程序设计之类与反射API详解
2016/12/02 PHP
php生成微信红包数组的方法
2019/09/05 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
js 页面执行时间计算代码
2009/03/04 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
Python 学习笔记
2008/12/27 Python
Python基于有道实现英汉字典功能
2015/07/25 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
python try 异常处理(史上最全)
2019/03/07 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
2019/08/30 Python
python银行系统实现源码
2019/10/25 Python
使用pyshp包进行shapefile文件修改的例子
2019/12/06 Python
python3 实现调用串口功能
2019/12/26 Python
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
2014年三万活动总结
2014/04/26 职场文书
仓管员岗位职责
2015/02/03 职场文书
2016年中学清明节活动总结
2016/04/01 职场文书
Redis Cluster集群动态扩容的实现
2021/07/15 Redis
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫