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

更简单的说话则是,例如几个不同的接口 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 最简单的实现适配器设计模式相关推荐

  1. Java 基础学习之字符串的简单操作和适配器设计模式

    一 适配器设计模式 1.适配器是什么? 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作.其别名为包装器(Wrapper) ...

  2. 适配器设计模式,简单的Java代码模拟

    /**适配器设计模式* 问题:* 接口(方法比较多)--实现类(仅仅使用一个也得把其他方法给实现了,哪怕是空实现)* 结局方案:* 接口(方法比较多)--适配器类(实现接口,仅仅是空实现)--实现类( ...

  3. JAVA适配器设计模式简单应用

    1.为什么要有适配器设计模式 解决接口与接口实现类之间的继承矛盾问题 eg:一个食谱上有非常多的菜,蒸羊羔.蒸熊掌.蒸鹿尾儿.烧花鸭.烧雏鸡.烧子鹅.卤猪.卤鸭.酱鸡......我现在想要吃蒸羊羔,对 ...

  4. C#:适配器设计模式如何让您的生活更轻松

    目录 介绍 文章的目标 理解本文您需要知道什么 适配器设计模式的简要提示 第一个示例:静态.NET类 第二个示例:使用第三方记录器替换自定义记录器 第三个示例:使用不同的自定义记录器替换自定义记录器 ...

  5. Python 中最简最好的设计模式

    大势所趋,Python 已然成风 C语言诞生于1972年,确随着 Unix 的诞生才深深植根于各大操作系统: C++诞生于1983年,确因微软的可视化桌面操作系统才得以广泛传播: Java 诞生于19 ...

  6. python实现简单的情感分析

    python实现简单的情感分析 1 数据导入及预处理 1.1 数据导入 # 数据导入 import pandas as pd data = pd.read_csv('../data/京东评论数据.cs ...

  7. 很多都是python很简单吗,但是要如何才能入门python并精通呢?

    1,python怎么学 一般来说,Python几个月应该是可以入门了.如果你几个月还没有入门,一定是方法不对,要么就是偷懒了.我在公众号里面有一篇文章详细写过 '初学者上来不要学爬虫',爬虫虽然非常有 ...

  8. 教你如何运用python实现简单文件读写函数

    这篇文章主要为大家详细介绍了python实现简单文件读写函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 python作为脚本性语言,加上它的简便易用性.会经常当作脚 ...

  9. python matplotlib 简单用法

    python matplotlib 简单用法 具体内容请参考官网 代码 import matplotlib.pyplot as plt import numpy as np # 支持中文 plt.rc ...

最新文章

  1. 牵引力人事主管告诉你:如何面试Web前端开发工程师
  2. 美国 2006 年机器学习和知识发现年会数据挖掘使用率较高算法排名
  3. 【性能优化】EKPO/EKBE和LIPS做JOIN的问题
  4. 联合查询是要多创建一个实体类么_[译] 如何用 Room 处理一对一,一对多,多对多关系?...
  5. 《剑指offer》把二叉树打印成多行
  6. target tile component.js load logic
  7. swagger 使用指南
  8. 作者:张丹(1991-),女,中南大学信息与工程学院硕士生。
  9. 校园网下载IEEE论文
  10. 2021.08.28-MMsegmentation0.16.0+Cuda10.1+Ubuntu16.04+Pytorch1.8环境安装
  11. Netty工作笔记0043---单Reactor多线程模式
  12. 电脑磁盘空间不足怎么办_Mac磁盘总是提示空间不足?学会这几招,瞬间腾出几个G...
  13. P2540 斗地主增强版
  14. Java垃圾回收机制(GC原理)解析
  15. 计算机误删恢复软件,电脑误删文件恢复软件_手机数据恢复工具-万能数据恢复大师...
  16. docker容器访问宿主机的mysql
  17. .Net MVC个人笔记
  18. 思科三层交换机开启ipv6路由功能_思科路由器配置 IPv6 和 OSPFv3 路由
  19. 爬杜蕾斯官方微博,内容太刺激了吧
  20. Android-银联支付开发

热门文章

  1. 在asp.net core中使用的验证框架FluentValidation
  2. c#爬虫-1688官网自动以图搜图
  3. 程序员过关斩将--Http请求中如何保持状态?
  4. 关于TensorFlow开发者证书,你想要的资源都在这里!
  5. Blazor带我重玩前端(一)
  6. Polly:提升服务可用性
  7. gRPC in ASP.NET Core 3.x - gRPC 简介(1)
  8. dapr微服务.net sdk入门
  9. Dapper源码学习和源码修改(下篇)
  10. 微软建议Windows 10开发人员升级到Visual Studio 2017