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实现Linux下守护进程的编写方法
Aug 22 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
Python实现程序的单一实例用法分析
Jun 03 Python
基于python的七种经典排序算法(推荐)
Dec 08 Python
Python 类的继承实例详解
Mar 25 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
Django项目开发中cookies和session的常用操作分析
Jul 03 Python
python画折线图的程序
Jul 26 Python
Django之模型层多表操作的实现
Jan 08 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
python程序 创建多线程过程详解
Sep 23 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 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 Socket配置以及实例的详细介绍
2013/06/13 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
js单词形式的运算符
2014/05/06 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
python中urllib模块用法实例详解
2014/11/19 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
Python之os操作方法(详解)
2017/06/15 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
Python跳出多重循环的方法示例
2019/07/03 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
会议欢迎词
2015/01/23 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技