一、简介
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版权协议,转载请附上原文出处链接和本声明。