(二)结构型模式:1、适配器模式(Adapter Pattern)(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()
函数时,实际上会调用到适配器类中的具体函数。