(二)结构型模式:1、适配器模式(Adapter Pattern)(C++实现示例)

目录

1、适配器模式(Adapter Pattern)含义

2、适配器模式应用场景

3、适配器模式的UML图学习

4、C++实现适配器模式的示例


1、适配器模式(Adapter Pattern)含义

将一个接口转换为客户端所期待的接口,从而使两个接口不兼容的类可以在一起工作;

适配器模式通常用于将不兼容的类组合在一起工作,或将旧代码与新代码集成在一起。

适配器模式还有个别名叫:Wrapper(包装器),顾名思义就是将目标类用一个新类包装一下,相当于在客户端与目标类直接加了一层。

IT世界有句俗语:没有什么问题是加一层不能解决的

2、适配器模式应用场景

(1)当需要使用一个现存的类,但它提供的接口与我们系统的接口不兼容,而我们还不能修改它时;

(2)当多个团队独立开发系统的各功能模块,然后组合在一起,但由于某些原因事先不能确定接口时。

3、适配器模式的UML图学习

适配器模式有3个角色:

(1)Target:是一个接口,是客户端使用的目标接口;

(2)Adaptee:是我们想要的接口,与Target不兼容的类,这个可以是一个接口或类;

(3)Adapter:适配器类,此模式的核心。它需要实现目标接口Target,而且必须引用Adaptee,因为我们要在此类包装Adaptee的功能;

4、C++实现适配器模式的示例


#include <iostream>
#include <string>

// 目标接口
class Target 
{
public:
    virtual void request() const = 0;
};

// 源接口
class Adaptee 
{
public:
    void specificRequest() const 
    {
        std::cout << "Adaptee: specificRequest" << std::endl;
    }
};

// 类适配器
class Adapter : public Target, private Adaptee 
{
public:
    void request() const override 
    {
        specificRequest();
    }
};

int main() 
{
    // 使用适配器调用目标接口
    Target* target = new Adapter();
    target->request();

    delete target;

    return 0;
}

在上述示例中,我们首先定义了目标接口(Target),其中包含了一个纯虚函数request()。然后,我们定义了源接口(Adaptee),其中包含了一个具体函数specificRequest()

接着,我们通过类适配器的方式实现了适配器类(Adapter),它继承自目标接口,并私有继承源接口。在适配器类中,我们实现了目标接口的纯虚函数,内部调用了源接口的具体函数。

在主函数中,我们创建了一个适配器对象,并通过目标接口调用了适配器的request()函数。由于适配器类同时继承了目标接口和源接口,所以在调用request()函数时,实际上会调用到适配器类中的具体函数。