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之画圈还不简单吗?
Sep 20 Python
Python入门篇之条件、循环
Oct 17 Python
Python实现基于HTTP文件传输实例
Nov 08 Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
python实战串口助手_解决8串口多个发送的问题
Jun 12 Python
python opencv实现证件照换底功能
Aug 19 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
Python 实现将某一列设置为str类型
Jul 14 Python
浅析Python 责任链设计模式
Sep 11 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
smarty实例教程
2006/11/19 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
理解JS事件循环
2016/01/07 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
Python 列表list使用介绍
2014/11/30 Python
深入解析Python中的urllib2模块
2015/11/13 Python
Python调用C++程序的方法详解
2017/01/24 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
Flask之flask-script模块使用
2018/07/26 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
Python中过滤字符串列表的方法
2020/12/22 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
无财产无子女离婚协议书范文
2014/09/14 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
小学生暑假生活总结
2015/07/13 职场文书
MySQL学习之基础操作总结
2022/03/19 MySQL
Android中View.post和Handler.post的关系
2022/06/05 Java/Android
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang