设计模式-适配器模式 C++

一、简介

1、什么是适配器模式

适配器模式属于结构型模式。

适配器作为两个接口之间的桥梁,用于适配两个不兼容的两个接口。

适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

2、适配器模式用于解决什么问题

在工程中,可能要将现存的类A放到新的环境中,而新环境要求的接口B是现对象不能满足的。我们在无法改变A和B的情况下可以增加一个适配器类C,C调用现存的类对象A实现B的某些功能。达到用A实现了B的接口的效果。

4、使用适配器模式的注意事项

虽然适配器模式可以使用原来已经有的类实现新的接口,提高了类的复用性。但是过多地使用适配器模式会增加系统的复杂度和代码的可读性。所以在工程中,我们要结合现实情况考虑要不要使用适配器。

二、适配器模式实例

我们先明确下一个简单的适配器模式有哪些必须的组件:

A、已经存在的,对功能实现提供具体方法的类A;

B、客户希望实现的新接口B,即B对客户提供实现功能的接口

C、适配器类C,继承接口B,但是内部调用A的对象实现功能;

1)首先,这是类A,提供具体的功能sendRequest:向服务器发送请求

//已存在的类
class OldSystemServer
{
public:
    void sendRequest()
    {
        cout << "向服务器发送请求..." << endl;
    }
};

2)接口类B,为对客户提供的接口。里面为客户提供了向服务器发送请求的服务,但是自己没有实现

//新系统接口
class NewSystemInterface
{
public:
    virtual ~NewSystemInterface() {};
    virtual void request() = 0;
};

3)适配器C,用于具体实现B的服务(向服务器发送请求),实现方法为:调用A的对象的方法sendRequest(向服务器发送请求)

//新系统接口NewSystemInterface的适配器,使用OldSystemServer对象实现方法:request的功能
class Adapter : public NewSystemInterface
{
public:
    Adapter()
    {
        _oldServer = new OldSystemServer();
    }

    ~Adapter()
    {
        if (nullptr != _oldServer)
        {
            delete _oldServer;
            _oldServer = nullptr;
        }
    }

    virtual void request()
    {
        cout << "新系统请求服务器" << endl;

        if (nullptr != _oldServer)
        {
            _oldServer->sendRequest();
        }
    }

private:
    OldSystemServer* _oldServer;
};

4)客户可以通过NewSystemInterface接口对象,实现”向服务器发送请求“这个功能

int main()
{
	//客户可以通过NewSystemInterface接口对象,实现”向服务器发送请求“这个功能
    NewSystemInterface* newSystem = new Adapter();
    newSystem->request();

    delete newSystem;
    system("pause");
    return 0;
}


版权声明:本文为ymhdt原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。