《设计模式》适配器模式
Posted joker D888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《设计模式》适配器模式相关的知识,希望对你有一定的参考价值。
《设计模式》适配器模式
适配器(Adapter)是一种结构型设计模式,它允许我们将一个类的接口转换成另一个类的接口,从而使得原本由于接口不兼容而无法合作的类能够一起工作。适配器模式通常用于以下情况:
- 在已有的类中添加一些新的行为或者功能,但是又不能改变其原有的接口。在这种情况下,我们可以创建一个适配器,将新的功能转换成已有类所能接受的接口。
- 当需要将一个现有的类集成到另一个类库中时,由于接口不同,无法直接集成。这时候可以创建一个适配器类,将现有类的接口转换成另一个类库的接口。
适配器模式的优点包括:
- 提高代码的复用性:适配器模式可以让不兼容的类一起工作,从而提高代码的复用性。
- 提高代码的灵活性:适配器模式可以让我们很容易地扩展现有的代码,添加新的功能。
- 降低代码的依赖性:适配器模式可以让我们减少对现有代码的依赖,从而提高代码的可维护性。
在本例中,我们将实现一个适配器,将一个现有的类的接口转换成目标类的接口。
假设我们有一个名为 Adaptee
的类,它有一个名为 SpecificRequest()
的方法:
class Adaptee
public:
void SpecificRequest() std::cout << "SpecificRequest called." << std::endl;
;
现在,我们需要将 Adaptee
类的接口转换成目标类的接口,该目标类需要具有一个名为 Request()
的方法。我们可以使用适配器模式来实现这一点。首先,我们定义一个目标类:
class Target
public:
virtual void Request() = 0;
;
然后,我们定义一个适配器类,该类继承自目标类并包含一个指向 Adaptee
对象的指针:
class Adapter : public Target
private:
Adaptee* m_adaptee;
public:
Adapter(Adaptee* adaptee) : m_adaptee(adaptee)
virtual void Request() override
std::cout << "Adapter called." << std::endl;
m_adaptee->SpecificRequest();
;
在上面的代码中,适配器类实现了目标类的接口,即 Request()
方法,并在该方法中调用了 Adaptee
对象的 SpecificRequest()
方法。
最后,我们可以使用以下代码测试适配器模式:
int main()
Adaptee adaptee;
Target* target = new Adapter(&adaptee);
target->Request();
delete target;
return 0;
在上面的代码中,我们首先创建了一个 Adaptee
对象,并使用该对象创建了一个适配器对象。然后,我们使用适配器对象调用 Request()
方法,该方法实际上会调用 Adaptee
对象的 SpecificRequest()
方法。
C++ STL stack queue
C++ STL 中的stack和queue内部都使用了deque,也就是说deque是stack和queue内部的Adaptee对象,不过并不像上方一样使用指针,而是组合了对象,对deque的接口转为了另外一种接口。
以上是关于《设计模式》适配器模式的主要内容,如果未能解决你的问题,请参考以下文章