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

一、说明

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

(一) 解决问题

主要解决接口不兼容问题

(二) 使用场景

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

二、结构

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

三、伪代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__doc__ = """
适配器模式

例:不同国家的电源插头不同,可通过适配器使用不同国家的插头进行供电
"""


class ChinaPlug:
    """
    定义中国的插头
    """

    @staticmethod
    def power_supply():
        return "中国的两脚插头供电中..."


class USPlug:
    """
    定义美国的插头
    """

    @staticmethod
    def power_supply():
        return "美国的两脚插头供电中..."


class Adapter:
    """
    定义适配器,支持使用多类插头
    """

    def __init__(self, plug):
        self.plug = plug

    def 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博客

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值