适配器模式(Adapter)

实际生活中的应用

情境:
你有一个老款的手机充电器,它使用的是Micro USB接口,而你新买的手机使用的是USB-C接口。这两个接口不兼容,但你并不想购买新的充电器。那么,你可以使用一个适配器,将Micro USB接口转换成USB-C接口,这样老款充电器就能给新手机充电了。

解释:
这个适配器就是我们所谓的“适配器模式”:它将一个不兼容的接口转换成另一个接口,使得两个本来不能一起工作的设备可以协同工作。

代码示例

假设我们有一个老的接口(旧系统)和一个新的接口(新系统),我们希望通过适配器使二者协同工作。

旧系统接口:
class OldSystem {
public:
    void oldRequest() {
        std::cout << "Using old system request." << std::endl;
    }
};
新系统接口:
class NewSystem {
public:
    virtual void newRequest() = 0; // New interface that clients expect
};
适配器类:
class Adapter : public NewSystem {
private:
    OldSystem* oldSystem;

public:
    Adapter(OldSystem* os) : oldSystem(os) {}

    void newRequest() override {
        oldSystem->oldRequest(); // Translate the new request to the old request
    }
};
使用适配器类:
int main() {
    OldSystem* oldSystem = new OldSystem();
    NewSystem* adapter = new Adapter(oldSystem);

    adapter->newRequest(); // The client uses the new interface which gets adapted to the old one

    delete adapter;
    delete oldSystem;

    return 0;
}
完整代码
#include <iostream>

// 旧系统接口
class OldSystem {
public:
    void oldRequest() {
        std::cout << "Using old system request." << std::endl;
    }
};

// 新系统接口
class NewSystem {
public:
    virtual void newRequest() = 0; // New interface that clients expect
};

// 适配器类
class Adapter : public NewSystem {
private:
    OldSystem* oldSystem; // 持有一个旧系统实例

public:
    Adapter(OldSystem* os) : oldSystem(os) {}

    void newRequest() override {
        oldSystem->oldRequest(); // 将新请求适配到旧的请求
    }
};

// 客户端代码
int main() {
    OldSystem* oldSystem = new OldSystem(); // 创建旧系统实例
    NewSystem* adapter = new Adapter(oldSystem); // 创建适配器实例

    adapter->newRequest(); // 客户端使用新的接口,实际调用的是旧系统的接口

    // 清理内存
    delete adapter;
    delete oldSystem;

    return 0;
}

解释

  1. OldSystem:表示旧的系统接口,提供一个旧的请求方法 oldRequest
  2. NewSystem:表示新的系统接口,是客户期望的接口,定义了一个虚的 newRequest 方法。
  3. Adapter:适配器类,它实现了 NewSystem 接口,并持有一个 OldSystem 的实例。在 newRequest 方法中,它调用 OldSystem 的 oldRequest 方法,从而实现了旧接口到新接口的转换。
  4. main:客户端代码,它创建一个 OldSystem 实例和一个适配器实例。客户端通过适配器调用 newRequest 方法,实际上会调用旧系统的 oldRequest 方法。

这个例子显示了如何使用适配器模式来解决接口不兼容的问题,使得原本由于接口不同而不能协同工作的类可以平稳地协作。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值