当前位置: 首页 > news >正文

【Python笔记-设计模式】适配器模式

一、说明

适配器模式是一种结构型模式,它使接口不兼容的对象能够相互合作

(一) 解决问题

主要解决接口不兼容问题

(二) 使用场景

  • 当系统需要使用现有的类,但类的接口不符合需求时
  • 当需要一个统一的输出接口,但输入类型不可预知时
  • 当需要创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类协同工作时

二、结构

  1. 客户端(Client)是包含当前程序业务逻辑的类。
  2. 客户端接口(Client Interface)描述了其他类与客户端代码合作时必须遵循的协议。
  3. 服务(Service)中有一些功能类(通常来自第三方或遗留系统)。客户端与其接口不兼容,因此无法直接调用其功能。
  4. 适配器(Adapter)是一个可以同时与客户端和服务交互的类:它在实现客户端接口的同时封装了服务对象。适配器接受客户端通过适配器接口发起的调用,并将其转换为适用于被封装服务对象的调用。
  5. 客户端代码只需通过接口与适配器交互即可,无需与具体的适配器类耦合。因此,你可以向程序中添加新类型的适配器而无需修改已有代码。这在服务类的接口被更改或替换时很有用:你无需修改客户端代码就可以创建新的适配器类。

三、伪代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__doc__ = """
适配器模式例:不同国家的电源插头不同,可通过适配器使用不同国家的插头进行供电
"""class ChinaPlug:"""定义中国的插头"""@staticmethoddef power_supply():return "中国的两脚插头供电中..."class USPlug:"""定义美国的插头"""@staticmethoddef power_supply():return "美国的两脚插头供电中..."class Adapter:"""定义适配器,支持使用多类插头"""def __init__(self, plug):self.plug = plugdef power_supply(self):return f"适配器使用{self.plug.__class__.__name__}供电中..."# 客户端代码
if __name__ == "__main__":"""美国的两脚插头供电中...中国的两脚插头供电中...------------------------------适配器使用ChinaPlug供电中...适配器使用USPlug供电中..."""us_plug = USPlug()china_plug = ChinaPlug()print(us_plug.power_supply())print(china_plug.power_supply())print("-" * 30)adapters = [Adapter(china_plug), Adapter(us_plug)]for adapter in adapters:print(adapter.power_supply())

四、优缺点

优点

  • 兼容性:可以让原本不兼容的接口协同工作,提高系统的兼容性
  • 复用性:可以复用现有的类,无需修改原有代码,符合开闭原则

缺点

  • 增加了系统的复杂性:需要新增一系列接口和类。 有时直接更改服务类使其与其他代码兼容会更简单。

 跳转主页:【Python笔记】设计模式-CSDN博客

http://www.lryc.cn/news/305442.html

相关文章:

  • 二分算法(c++版)
  • 【C#】用于基于 UV DLP 的 3D 打印机的切片软件源码解析(一)DLP原理 GUI
  • Javase补充-Arrays类的常用方法汇总
  • 微信小程序-人脸检测-眨眼驱动ESP32蓝牙设备灯
  • 怎么在wifi中实现手机和电脑文件互传
  • 07 STL 简介
  • unity学习(39)——创建(create)角色脚本(panel)——静态(static)
  • MacOS环境下用powerline配置Terminal终端
  • liunx单机项目部署
  • SQL 中如何实现多表关联查询?
  • oracle 设置权限 禁止删除用户
  • 港科夜闻|香港科大计划建立北部都会区卫星校园完善科大创新带,发展未来创新科技 未来医药发展及跨学科教育...
  • linux反弹shell简单使用
  • 前后端分离Vue+nodejs校园论坛bbs系统x450z
  • ChatGPT的能力边界在哪?
  • Sentinel微服务流量治理组件实战下
  • vue+node.js美食分享推荐管理系统 io551
  • 云原生超融合八大核心能力|ZStack Edge云原生超融合产品技术解读
  • 认识K8S
  • K8S-001-Virtual box - Network Config
  • ShardingSphere5.x 分库分表
  • cmake 项目。qt5升级 qt6 报错 error: “Qt requires a C++17 compiler 已解决
  • Flutter Engine 编译
  • 数据可视化在商业领域有哪些重要性?
  • UI风格汇:扁平化风格来龙去脉,特征与未来趋势
  • 【雷达指标】MTI/MTD性能
  • 暴雨服务器:科技创新构建高效、高质、可持续的新质生产力
  • 在 where子句中使用子查询(一)
  • kafka为什么性能这么高?
  • 安卓OpenGL添加水印并录制(二)---抖音录制原理