适配器模式(Adapter)


一、适配器模式解决什么问题?

一句话:

接口不兼容,但你又不能改原有代码。

现实世界类比:

  • 国标插头插不进英标插座
  • 需要一个转换头

软件世界中:

  • 老系统接口不能改
  • 第三方库接口格式不一致
  • 新旧系统并存

这时就需要 —— 适配器(Adapter)


二、定义

将一个类的接口转换成客户端期望的另一个接口,使原本由于接口不兼容而不能一起工作的类可以一起工作。

核心关键词:

  • 接口转换
  • 不修改原类
  • 让旧代码继续工作

三、一个真实业务场景

假设你原本系统中定义了统一支付接口:

class Payment:
    def pay(self, amount):
        pass

后来接入一个第三方支付 SDK:

class ThirdPartyPay:
    def make_payment(self, money):
        print(f"第三方支付 {money}")

问题:

  • 你系统里所有代码都调用 pay()
  • 第三方方法叫 make_payment()
  • 不能改第三方源码
  • 也不想大规模改系统

怎么办?

适配器模式。


四、对象适配器(最常用)

这是 Python 中最常见的方式 —— 组合实现适配

class PaymentAdapter(Payment):
    def __init__(self, third_party_pay):
        self.third_party_pay = third_party_pay

    def pay(self, amount):
        self.third_party_pay.make_payment(amount)

使用:

third = ThirdPartyPay()
adapter = PaymentAdapter(third)

adapter.pay(100)

现在:

  • 系统依然调用 pay
  • 实际执行的是 make_payment
  • 原有代码零改动

这就是对象适配器。


五、类适配器(Python 中不常用)

在某些语言(如 Java)中,可以用多重继承。

Python 也可以,但通常不推荐:

class PaymentAdapter(Payment, ThirdPartyPay):
    def pay(self, amount):
        self.make_payment(amount)

问题:

  • 耦合更高
  • 不够灵活
  • 不利于替换对象

Python 更推荐组合。


六、适配器在真实项目中的应用

适配器模式非常常见,你几乎每天都在用。

1. 日志系统适配

假设项目统一使用:

logger.info("message")






次阅读

扫描下方二维码,关注公众号:程序进阶之路,实时获取更多优质文章推送。


扫码关注

评论