适配器模式(附C++代码示例)

适配器模式的含义

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间进行交互。适配器模式通过创建一个中间层,即适配器,来实现两个不兼容的接口的兼容。适配器接收对一个接口的调用请求,将其转化为另一个接口的一种兼容形式,并将其传递给可以理解该请求的对象。

核心思想及解释

适配器模式的核心思想是转换接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器改变接口的表现形式而不改变其本身的行为,达到软件组件的复用与扩展。

为什么要使用适配器模式

  1. 接口不兼容问题: 当希望使用某些现有的类,但其接口与其他代码不兼容时,可以使用适配器模式而无需修改原有代码。
  2. 统一多个类的接口: 当需要统一多个不同接口的行为并使它们可以一起工作时,使用适配器可以提供统一的解决方案。
  3. 增加类的透明性和复用: 适配器可以让客户从实现细节中解耦,通过新的接口使用同一个类。

使用适配器模式需要注意的点

  1. 不要过度使用: 仅在确实需要转换接口时使用适配器模式,否则可能会使系统复杂化。
  2. 设计前的考虑: 在添加新的适配器之前,应该考虑是否有可能通过修改现有系统的架构来满足需求,而不是简单地添加适配器。

工程的应用场景

  1. 遗留代码的集成: 当需要将遗留代码或第三方库集成到现有系统中时,适配器可以使这些代码与现有的系统环境兼容。
  2. 接口不一致的问题: 当两个组件或类所提供的接口不一致,但功能相似,希望它们可以一起工作时。
  3. 系统的扩展性: 当预期到系统可能需要与未来的产品或系统交互时,适配器可以作为一种预防措施来设计系统。

示例代码及解释

假设我们有一个现有的类 OldPrinter,它有一个打印方法 printOld(),和新系统中的打印接口 NewPrinter 不兼容,NewPrinter 使用的方法是 printNew()。我们将通过适配器模式使得 OldPrinter 能在新系统中使用。

定义旧的打印机类:

#include <iostream>
using namespace std;

// 旧的打印机类
class OldPrinter {
public:
    void printOld() {
        cout << "Print from Old Printer." << endl;
    }
};

定义新的打印接口:

// 新的打印接口
class NewPrinter {
public:
    virtual void printNew() = 0;
    virtual ~NewPrinter() {}
};

定义适配器类:

// 适配器类
class Adapter : public NewPrinter {
private:
    OldPrinter* oldPrinter;

public:
    Adapter(OldPrinter* printer) : oldPrinter(printer) {}

    void printNew() override {
        oldPrinter->printOld();  // 调用旧的打印方法
    }

    ~Adapter() {
        delete oldPrinter;
    }
};

客户端代码:

int main() {
    OldPrinter* oldPrinter = new OldPrinter();
    NewPrinter* printer = new Adapter(oldPrinter);
    printer->printNew();  // 

通过新接口使用旧的打印机

    delete printer;
    return 0;
}

输出代码运行结果

Print from Old Printer.

这个例子展示了如何使用适配器模式来让原本不兼容的 OldPrinter 类通过 NewPrinter 的接口被新系统使用。适配器 Adapter 实现了新的接口,并在内部调用了旧的打印方法,从而实现了接口的转换。这样旧的打印机就可以在新系统中无缝使用,而无需修改旧类的代码。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Warren++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值