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())
python 最简单的实现适配器设计模式相关推荐
- Java 基础学习之字符串的简单操作和适配器设计模式
一 适配器设计模式 1.适配器是什么? 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作.其别名为包装器(Wrapper) ...
- 适配器设计模式,简单的Java代码模拟
/**适配器设计模式* 问题:* 接口(方法比较多)--实现类(仅仅使用一个也得把其他方法给实现了,哪怕是空实现)* 结局方案:* 接口(方法比较多)--适配器类(实现接口,仅仅是空实现)--实现类( ...
- JAVA适配器设计模式简单应用
1.为什么要有适配器设计模式 解决接口与接口实现类之间的继承矛盾问题 eg:一个食谱上有非常多的菜,蒸羊羔.蒸熊掌.蒸鹿尾儿.烧花鸭.烧雏鸡.烧子鹅.卤猪.卤鸭.酱鸡......我现在想要吃蒸羊羔,对 ...
- C#:适配器设计模式如何让您的生活更轻松
目录 介绍 文章的目标 理解本文您需要知道什么 适配器设计模式的简要提示 第一个示例:静态.NET类 第二个示例:使用第三方记录器替换自定义记录器 第三个示例:使用不同的自定义记录器替换自定义记录器 ...
- Python 中最简最好的设计模式
大势所趋,Python 已然成风 C语言诞生于1972年,确随着 Unix 的诞生才深深植根于各大操作系统: C++诞生于1983年,确因微软的可视化桌面操作系统才得以广泛传播: Java 诞生于19 ...
- python实现简单的情感分析
python实现简单的情感分析 1 数据导入及预处理 1.1 数据导入 # 数据导入 import pandas as pd data = pd.read_csv('../data/京东评论数据.cs ...
- 很多都是python很简单吗,但是要如何才能入门python并精通呢?
1,python怎么学 一般来说,Python几个月应该是可以入门了.如果你几个月还没有入门,一定是方法不对,要么就是偷懒了.我在公众号里面有一篇文章详细写过 '初学者上来不要学爬虫',爬虫虽然非常有 ...
- 教你如何运用python实现简单文件读写函数
这篇文章主要为大家详细介绍了python实现简单文件读写函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 python作为脚本性语言,加上它的简便易用性.会经常当作脚 ...
- python matplotlib 简单用法
python matplotlib 简单用法 具体内容请参考官网 代码 import matplotlib.pyplot as plt import numpy as np # 支持中文 plt.rc ...
最新文章
- 牵引力人事主管告诉你:如何面试Web前端开发工程师
- 美国 2006 年机器学习和知识发现年会数据挖掘使用率较高算法排名
- 【性能优化】EKPO/EKBE和LIPS做JOIN的问题
- 联合查询是要多创建一个实体类么_[译] 如何用 Room 处理一对一,一对多,多对多关系?...
- 《剑指offer》把二叉树打印成多行
- target tile component.js load logic
- swagger 使用指南
- 作者:张丹(1991-),女,中南大学信息与工程学院硕士生。
- 校园网下载IEEE论文
- 2021.08.28-MMsegmentation0.16.0+Cuda10.1+Ubuntu16.04+Pytorch1.8环境安装
- Netty工作笔记0043---单Reactor多线程模式
- 电脑磁盘空间不足怎么办_Mac磁盘总是提示空间不足?学会这几招,瞬间腾出几个G...
- P2540 斗地主增强版
- Java垃圾回收机制(GC原理)解析
- 计算机误删恢复软件,电脑误删文件恢复软件_手机数据恢复工具-万能数据恢复大师...
- docker容器访问宿主机的mysql
- .Net MVC个人笔记
- 思科三层交换机开启ipv6路由功能_思科路由器配置 IPv6 和 OSPFv3 路由
- 爬杜蕾斯官方微博,内容太刺激了吧
- Android-银联支付开发