Python 适配器模式极简实现:统一不同云存储接口

周予安
周予安
发布时间:2026-10-14 | 3人浏览过
原创

本文通过 Python 代码详解适配器设计模式的极简实现。针对阿里云、七牛云等不同上传类接口名不一致的问题,利用 Adapter 类封装差异,统一暴露 uploadyun 方法。通过 __dict__.update 动态绑定方法,实现调用接口的标准化,适用于需要统一调用不同第三方库或旧有系统的场景。

适配器模式概述

适配器设计模式旨在解决接口不兼容的问题。当现有代码难以修改,或某些第三方接口不便直接改动时,通过引入特定的封装层,将不同的接口转换为统一的调用方式,从而屏蔽底层差异。

具体而言,假设系统原本使用统一的 yun 接口进行文件备份,现需新增支持 aliyun、qiniuyun、tencentyun 等多种云存储。由于各新增接口的调用方法名各不相同,直接调用较为繁琐。此时,编写一个适配器,将这些不同名称的接口统一映射为 yun 接口的调用形式,即可实现统一上传文件的操作。

基础与新增上传类定义

首先定义一个基础的上传类 Upload,其中包含一个名为 yun 的方法:


class Upload:
  def yun(self):
    return '...... Uploading '

随后,系统新增了三个上传类: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 参数用于接收具体的上传对象(如 AliUpload、QiniuUpload、TencentUpload 或 Upload 的实例),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))

由于目标是通过统一的 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=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 相关产品和应用

全部下载

专题列表