《设计模式》适配器模式

Posted joker D888

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《设计模式》适配器模式相关的知识,希望对你有一定的参考价值。

《设计模式》适配器模式

适配器(Adapter)是一种结构型设计模式,它允许我们将一个类的接口转换成另一个类的接口,从而使得原本由于接口不兼容而无法合作的类能够一起工作。适配器模式通常用于以下情况:

  1. 在已有的类中添加一些新的行为或者功能,但是又不能改变其原有的接口。在这种情况下,我们可以创建一个适配器,将新的功能转换成已有类所能接受的接口。
  2. 当需要将一个现有的类集成到另一个类库中时,由于接口不同,无法直接集成。这时候可以创建一个适配器类,将现有类的接口转换成另一个类库的接口。

适配器模式的优点包括:

  1. 提高代码的复用性:适配器模式可以让不兼容的类一起工作,从而提高代码的复用性。
  2. 提高代码的灵活性:适配器模式可以让我们很容易地扩展现有的代码,添加新的功能。
  3. 降低代码的依赖性:适配器模式可以让我们减少对现有代码的依赖,从而提高代码的可维护性。

在本例中,我们将实现一个适配器,将一个现有的类的接口转换成目标类的接口。

假设我们有一个名为 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的接口转为了另外一种接口。

以上是关于《设计模式》适配器模式的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式C语言设计模式 --- 适配器模式

嵌入式C语言设计模式 --- 适配器模式

JDK设计模式之——装饰者模式(适配器模式)

设计模式之代理模式适配器模式和外观模式

适配器模式

设计模式--结构模式--适配者模式