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使用xauth方式登录饭否网然后发消息
Apr 11 Python
Python在Console下显示文本进度条的方法
Feb 14 Python
python使用sqlite3时游标使用方法
Mar 13 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
transform python环境快速配置方法
Sep 27 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
python性能测量工具cProfile使用解析
Sep 26 Python
超实用的 30 段 Python 案例
Oct 10 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
python os.path.isfile 的使用误区详解
Nov 29 Python
python实现ip地址的包含关系判断
Feb 07 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 01 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
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
smarty中常用方法实例总结
2015/08/07 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
JavaScript 学习技巧
2010/02/17 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
[00:48]DOTA2国际邀请赛公开赛报名开始 扫码开启逐梦之旅
2018/06/06 DOTA
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
python模拟表单提交登录图书馆
2018/04/27 Python
浅谈python 中类属性共享的问题
2019/07/02 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
兼职学生的自我评价
2013/11/24 职场文书
八一建军节活动方案
2014/02/10 职场文书
客服部工作职责范本
2014/02/14 职场文书
经贸专业毕业生求职信
2014/03/23 职场文书
和解协议书
2014/04/16 职场文书
学生干部培训方案
2014/06/12 职场文书
金融专业求职信
2014/08/05 职场文书
募捐感谢信
2015/01/22 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
大学生军训感言
2015/08/01 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript