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解析XML的四种方式
Mar 30 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
python实现矩阵打印
Mar 02 Python
python 实现dict转json并保存文件
Dec 05 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
python和js交互调用的方法
Jun 23 Python
Python安装Bs4的多种方法
Nov 28 Python
pycharm 实现复制一行的快捷键
Jan 15 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
Feb 06 Python
如何在python中实现ECDSA你知道吗
Nov 23 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操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
js如何打印object对象
2015/10/16 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Saltstack快速入门简单汇总
2016/03/01 Python
python ---lambda匿名函数介绍
2019/03/13 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
化工机械应届生求职信
2013/11/04 职场文书
高中化学教学反思
2014/01/13 职场文书
党员实事承诺书
2014/03/26 职场文书
文明倡议书范文
2014/04/15 职场文书
小组名称和口号
2014/06/09 职场文书
男性健康日的活动方案
2014/08/18 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
小学班主任教育随笔
2015/08/15 职场文书
大学生先进个人主要事迹材料
2015/11/04 职场文书
高三英语教学反思
2016/03/03 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP