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动态加载变量示例分享
Feb 17 Python
Python文件读取的3种方法及路径转义
Jun 21 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
python中的文件打开与关闭操作命令介绍
Apr 26 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 Python
使用 django orm 写 exists 条件过滤实例
May 20 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
Oct 22 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 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原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php+highchats生成动态统计图
2014/05/21 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
JS引用传递与值传递的区别与用法分析
2018/06/01 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
python处理大数字的方法
2015/05/27 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
如何通过python实现全排列
2020/02/11 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
pandas按条件筛选数据的实现
2021/02/20 Python
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
建筑工程自我鉴定
2013/10/18 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
环卫工人节活动总结
2014/08/29 职场文书
科学育儿宣传标语
2014/10/08 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
音乐教师求职信范文
2015/03/20 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
Python实现科学占卜 让视频自动打码
2022/04/09 Python