当前位置:   article > 正文

适配器设计模式

适配器设计模式

1、适配器设计模式概述:

适配器模式(Adapter Pattern)是一种结构型设计模式,用于在不修改现有类的情况下使其与其他类兼容。适配器模式通过创建一个新的适配器类,将一个类的接口转换为另一个类所期望的接口,从而使原本接口不兼容的类能够协同工作。适配器模式有两种形式:类适配器(使用多重继承)和对象适配器(使用组合)。
适配器模式通常包含以下角色:

  • 目标接口(Target):定义客户期望使用的接口。
  • 待适配类(Adaptee):需要适配的类,它提供了一些功能,但其接口与目标接口不兼容。
  • 适配器(Adapter):实现目标接口并与待适配类交互的类。适配器负责将待适配类的接口转换为目标接口。

2、适配器设计模式的适用场景:

  • 当需要使用一个现有类,但其接口与当前系统不兼容时,可以使用适配器模式。
  • 当需要重用多个现有的子类,但它们的接口不统一时,可以使用适配器模式统一接口。
  • 当需要将多个不同的接口协同工作时,可以使用适配器模式将它们适配为统一的接口。

3、适配器设计模式的优点:

  • 适配器模式提高了代码的复用性,可以将现有类的接口转换为新的接口,以满足新的需求。
  • 适配器模式提高了类之间的解耦性,使得原本不兼容的接口可以协同工作。
  • 适配器模式可以实现对目标接口的抽象,使得在实际使用中可以方便地替换或扩展适配器类

4、适配器设计模式的缺点:

  • 使用适配器模式可能会导致系统复杂性增加,需要额外创建适配器类来转换接口。
  • 当使用类适配器时,由于 C++ 不支持多继承,可能导致一些局限性。

5、用C++实现一个适配器设计模式例子:

#include <iostream>

// 目标接口
class Target {
public:
    virtual ~Target() = default;
    virtual void request() const = 0;
};

// 待适配类
class Adaptee {
public:
    void specificRequest() const {
        std::cout << "Adaptee's specific request." << std::endl;
    }
};

// 适配器
class Adapter : public Target {
public:
    Adapter(Adaptee* adaptee) : adaptee_(adaptee) {}

    void request() const override {
        adaptee_->specificRequest();
    }

private:
    Adaptee* adaptee_;
};

int main() {
    Adaptee* adaptee = new Adaptee();
    Target* adapter = new Adapter(adaptee);
    adapter->request();

    delete adapter;
    delete adaptee;

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

在这个例子中,我们首先定义了一个目标接口 Target,它包含一个名为 request() 的方法。然后,我们创建了一个待适配类 Adaptee,它提供了一个名为 specificRequest() 的方法。我们希望将 Adaptee 类的 specificRequest() 方法适配为 Target 类的 request() 方法。

为此,我们创建了一个适配器类 Adapter,它继承自 Target 类并实现了 request() 方法。在 Adapter 类的 request() 方法中,我们调用了 Adaptee 类的 specificRequest() 方法。这样,通过 Adapter 类,我们可以将 Adaptee 类的 specificRequest() 方法适配为 Target 类的 request() 方法。

在 main 函数中,我们首先创建了一个 Adaptee 对象和一个 Adapter 对象。然后,我们通过 Adapter 对象调用了 request() 方法,实际上调用的是 Adaptee 对象的 specificRequest() 方法。这样,我们成功地将 Adaptee 类适配为了 Target 类。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/828814
推荐阅读
相关标签
  

闽ICP备14008679号