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实现实例
Apr 26 Python
python实现删除文件与目录的方法
Nov 10 Python
Python遍历目录的4种方法实例介绍
Apr 13 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
python验证码识别的实例详解
Sep 09 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
python GUI实例学习
Nov 21 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
django admin 后台实现三级联动的示例代码
Jun 22 Python
Django REST framework视图的用法
Jan 16 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
Python使用ElementTree美化XML格式的操作
Mar 06 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
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
document.getElementById介绍
2011/09/13 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
小程序指纹验证的实现代码
2018/12/04 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
浅析Python编写函数装饰器
2016/03/18 Python
pygame实现成语填空游戏
2019/10/29 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
Pytorch之保存读取模型实例
2019/12/30 Python
python logging设置level失败的解决方法
2020/02/19 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
新学期开学演讲稿
2014/05/24 职场文书
金陵十三钗观后感
2015/06/04 职场文书
python实现Thrift服务端的方法
2021/04/20 Python
MySQL 四种连接和多表查询详解
2021/07/16 MySQL
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript