python 最简单的实现适配器设计模式

适配器设计模式是懒得改动某些代码,或者某些接口不方便改动的时候,使用一个特定的封装,一些特定的编写办法,使不同的接口可以使用同种调用方式使用。

更简单的说话则是,例如几个不同的接口 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=yunself.__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())

结果如下:
在这里插入图片描述
统一名称后可以再一次封装,进行统一调用(此内容不是本文内容不再赘述)。
整体代码如下:

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=yunself.__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())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Envi和ArcGIS软件打开和处理.NC4数据

NC4是NetCDF-4的简缩形式。 NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。目…

cocos2d-x 3.0rc2中读取sqlite文件

cocos2d-x 3.0rc2中读取sqlite文件的方式,在Android中直接读取软件内的会失败。须要复制到可写的路径下 sqlite3* dbFile NULL;std::string path;path FileUtils::getInstance()->fullPathForFilename("db1.db");#if CC_TARGET_PLATFORM CC_PLATFOR…

hse不起振 stm8_STM8S207使用外部24M晶振不起振的解决办法

具体表现:1、使用 20M 的外部晶振,程序也能正常工作。2、使用 24M 的外部晶振,就不能工作,经示波器测量,晶振没有起振。3、为了去除晶振的原因,就换了一个 24M 的晶振,结果还是不行,…

剑指offer之数组出现次数超过一半的数字

1 问题 数组中有一个数字出现了次数超过数组长度的一半,请找出这个数字。 比如{1,2,3,2,2,2,5,4,2},我们知道这个数是2 2 分析 我们数组元素个数分为单数和双数 1)数组长度是单数的情况下 我们有5个元素,里面至少3个2,还有2个…

C#多线程调试

概要这篇文章主要分享多线程部分调试技巧,在日常的开发工作中会经常遇到多线程调试的需要。在我们调试的过程中会出现断点的焦点在多个线程之间“反复横跳”根本无法集中跟踪某一个线程的操作链路。那么今天我们来看看如何调试操作。如果有其它需要的可以参考下面微…

最速下降法(梯度下降法)

最速下降法的影子在机器学习中正是无处不在,它简单实用。 一、表示 在最速下降法中,对权值向量w的连续调整是在最速下降的方向上,即它是与梯度向量方向相反的,梯度向量记为(1),简记(…

游戏服务器销售额,游戏服务器销售一个月

游戏服务器销售一个月 内容精选换一换应用容器化改造有三种方式,您可单击这里查看。本教程以某游戏为例,将该游戏进行微服务的架构改造,再进行容器化。本教程不对改造细节做深度讲解,仅讲解大致的建议。如需要详细了解容器化改造的…

使用AppCompat项目模版

2019独角兽企业重金招聘Python工程师标准>>> 使用AppCompat项目模版 从Android API 22开始,谷歌推荐使用AppCompatActivity来构建带标题栏的App,而不是原有的ActionBarActivity。如果用户想要使用AppCompatActivity,可以使用Xamar…

python3 最基本且简单的实现组合设计模式

组合模式是把一个类别归为一个整体,并且组织多个整体之间的关系,使用通过树形结构来描述所有整体。 一般的编写方式为一个类别对象下添加多个该对象的元素,该对象又为其它对象下的元素。简单来说就是一个学校有一个总部,总部下有…

SQL Server 2008 阻止保存要求重新创建表的更改问题

习惯了使用SQL Server 2005进行数据库系统开发,为了赶上潮流的发展,最近在使用SQL 2008数据库,本来建好了一个表,后面需要对表的设计做些修改(比如字段长度的修改,忘记了设置主键等等),结果弹出错误提示,说什么“组织保存要求重新创建表的更改”,如下所示: 解决办法…

华为手机像素密度排行_华为手机也分三六九等,3款几乎“0差评”,支持5G价格良心...

随着9月15日美国对华为禁令的生效,台积电、三星等都无法再为华为供货。目前,华为芯片库存有限,可以说是用一片少一片,十分珍贵。因此,许多消费者都希望能在华为芯片用完之前,换一部新机。不过,华…

$geoNear

怎么使用mongoose的geoNear 2014-11-26 15:05:20| 分类: mongodb | 标签:mongoose |举报|字号 订阅 下载LOFTER我的照片书 |起因 在开发的时候碰到一个情况,数据源有100个景点,需要对给出的一个点,求距离它最近的…

linux shell之删除当前文件夹不包含文件1和文件2的其他所有文件

1 问题 删除当前文件夹不包含文件1和文件2的其他所有文件,这个当前文件夹里面可以包含子文件夹,然后子文件夹里面也有文件1和文件2,但是这里的文件1和文件2也不应该被删除。 2 解决办法 可以用如下shell命令都行 find . -type f -not -name…

甲骨文宣布供应链管理云平台支持LogFire仓库管理系统

本文讲的是 :甲骨文宣布供应链管理云平台支持LogFire仓库管理系统 ,【IT168 资讯】甲骨文发布了一系列对其供应链管理产品的更新,并表示,云平台现在支持去年收购LogFire的仓库管理系统(WMS)。 ▲ Oracle将在最新版本的Oracle供应链管理(SCM)Cloud产品…

i5老是显示无服务器,为什么懂电脑的人选择买i5处理器,而不是i7,背后的真实原因?...

摘要:我们在选购电脑的时候经常会被五花八门的型号参数看的神魂颠倒,有很多朋友对cpu的理解也仅限于i7一定比i5好,i5一定比i3好的阶段。然而,对于很多懂电脑的人来说,选购电脑时,都不会买i7的CPU处理器&…

C# 对类型系统扩展性的改进

前言C# 对类型系统进行改进一直都没有停过,这是一个长期的过程。C# 8 之后则主要围绕扩展性方面进行各种改进,目前即将发布的 C# 11 中自然也包含该方面的进度。这些改进当然还没有做完,本文则介绍一下已经推出和即将推出的关于这方面改进的新…

python 实现装饰器设计模式

python 装饰器简单、基本的实现并不复杂。装饰器(Decorators)模式类似于继承,当你需要为某一个对象添加额外的动作、行为时,在不改变类的情况下可以使用装饰器。这篇文就当做一篇水文,本来不想写,因为这个专…

Excel抽奖小程序

今天分享一个用Excel制作的抽奖小程序。 如上图,制作一个抽奖小界面,滚动显示区域写入“INDIRECT("A"&RANDBETWEEN(2,13))”,按F9键不放,程序开始运行,松开F9键,抽奖完成。 函数解说&#x…

python导入函数模块 为什么会打印两次_5.1.2Python从模块导入函数

Posted by 撒得一地 on 2016年3月2日 in python教程国外稳定加速器推荐vypr |NordPython下模块导入函数,即把某件事作为另一件事导入,从模块导入函数的时候,可以使用:import somemodule或者from somemodule import somefunction或…

lz98n外接电源注意问题

当外接电源时,要将跳线帽拔掉,外接电源- 接12v和gnd 此时还得注意 l298n5v变成的使能输入 必须是单片机的io5v输入 而且单片机的gnd要和l298n的gnd链接 也就是来l298N的GND 要接两根线 一个是外部电源的- 还有就是单片机的gnd 特别注意 l298n的5v不…