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

作者:1_bit 时间:2021-10-14 12:07:59 

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

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

来源:https://blog.csdn.net/A757291228/article/details/107018206

标签:python,适配器
0
投稿

猜你喜欢

  • 23个MySQL数据库安全使用技巧

    2007-10-26 16:02:00
  • 讲解Oracle数据库中结束死锁进程的一般方法

    2024-01-17 01:16:00
  • pycharm如何设置官方中文(如何汉化)

    2022-04-27 06:20:18
  • python 邮件检测工具mmpi的使用

    2022-03-18 04:56:45
  • python实现多人聊天室

    2022-09-02 18:56:21
  • 实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250

    2021-04-26 21:27:11
  • Python面向对象特殊属性及方法解析

    2022-05-19 15:16:06
  • MySQL sql_mode的使用详解

    2024-01-16 00:13:59
  • SqlServer 数据库 三大 范式

    2024-01-15 06:58:55
  • 微软建议的ASP性能优化28条守则(8)

    2005-05-30 16:04:00
  • Python Learning 列表的更多操作及示例代码

    2022-11-15 01:05:33
  • MySQL表级锁使用说明

    2024-01-23 04:10:07
  • python初学之用户登录的实现过程(实例讲解)

    2023-03-16 17:27:37
  • go开源项目用户名密码验证的逻辑鬼才写法

    2024-05-08 10:44:20
  • Mysql中的Btree与Hash索引比较

    2024-01-16 12:56:49
  • 如何做一个可以让人家申请使用的计数器?

    2010-07-11 21:17:00
  • 详解MySQL的sql_mode查询与设置

    2024-01-14 08:30:20
  • SQL Server Alwayson创建代理作业的注意事项详解

    2024-01-19 06:03:15
  • 两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法

    2023-06-25 12:44:15
  • 对python中两种列表元素去重函数性能的比较方法

    2021-04-01 13:37:59
  • asp之家 网络编程 m.aspxhome.com