结构型模式 | 适配器模式

一、适配器模式

1、原理

适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式主要分为三类:类适配器模式、对象适配器模式、接口适配器。

2、角色

适配器模式核心的有下面三个角色

  • 源对象:需要被适配的不兼容对象
  • 目标接口:适配器对象要实现的标准接口
  • 适配器对象:该对象使用不兼容对象提供的能力实现标准接口

3、类适配器模式

3.1、实现原理

使用继承的方式,将需要适配的类转换为目标接口的子类,实现目标接口的所有方法,同时继承适配类的实现,用以完成一些适配逻辑(即:适配器类需要继承不兼容对象类,同时使用不兼容对象类提供的能力实现标准接口)

手机充电需要5V电压,但是标准的家庭用电电压是220V,下面通过案例来讲解如果通过类适配器模式把220V电压转换成手机需要的5V电压,UML类图如下:

结构型模式 | 适配器模式_第1张图片

代码实现

#include 
using namespace std;

// 被适配类(不兼容对象类)
class Voltage220V{
public:
    // 输出220V电压
    int Output220V(){
        return 220;
    }
};

// 适配接口(标准接口)
class IAdapter {
public:
    virtual int Ouput5V() = 0;
};

// 适配器类
class VoltageAdapter : public IAdapter, Voltage220V {
public:
    // 输出5V电压
    int Ouput5V(){
        int src = Output220V();
        return src / 44;
    }
};

// 手机类
class Phone{
public:
    // 充电
    void Charging(IAdapter *pAdapter){
        pAdapter->Ouput5V();
    }
};

int main()
{
    Phone phone;
    phone.Charging(new VoltageAdapter());
    return 0;
}

3.2、优缺点分析

优点

  • 安全可靠:封装了旧接口,对客户端透明,客户端代码无需修改
  • 提高复用性:可以复用不兼容的类
  • 扩展性好:在应用程序开发过程中,可以增加新的适配器和被适配对象

缺点

  • 过多的适配器会导致系统结构复杂

4、对象适配器模式

对象适配器模式是适配器模式中常用的一种方法,基本思路是使用关联替换继承。适配器类直接继承不兼容类,导致他们之间的强耦合,根据合成复用原则在系统中尽量使用关联关系来替换继承,下面是修改后的UML类图,如下:

结构型模式 | 适配器模式_第2张图片

5、总结

适配器模式的适用场景:

  • 重用现有的代码:适配器模式可以允许我们重用已有的类或接口,而不需要修改其原有的代码
  • 集成老系统:当现有的系统不满足用户需求时,需要增加系统功能或接口。但是,老系统的接口可能与现有的技术、平台不兼容,此时可以采用适配器模式,将现有的接口适配为新的接口,从而实现新系统的集成
  • 集成第三方组件:在使用第三方组件时,可能由于它们实现的 API 不同而导致应用程序复杂,此时可以使用适配器模式,将第三方组件提供的 API 适配为自己需要的 API,方便在应用程序中进行调用
  • 实现跨平台兼容:在不同平台、不同技术栈之间进行开发时,常常需要适配不同的接口,以使得不同的平台或技术栈之间能够相互兼容,此时可以使用适配器模式来处理各种不兼容问题

你可能感兴趣的:(设计模式原理与分析,适配器模式)