适配器设计模式

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;
}

在这个例子中,我们首先定义了一个目标接口 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 类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java适配器设计模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一种接口,从而使原本接口不匹配的两个类能够协同工作。适配器模式有两种实现方式:类适配器和对象适配器。 类适配器使用继承的方式实现适配器。它包括三个主要角色:目标接口、适配者类和适配器类。目标接口定义了客户端所期望的接口,适配者类是被访问和适配的现存组件库中的组件接口,适配器类继承了适配者类并实现了目标接口,通过继承和重写方法的方式将适配者接口转换成目标接口。 对象适配器使用对象组合的方式实现适配器。它也包括三个主要角色:目标接口、适配者类和适配器类。目标接口和适配者类的定义与类适配器相同,唯一的区别是适配器类不再继承适配者类,而是将适配者对象作为构造参数传入适配器类中,在适配器类的方法中调用适配者对象的方法来实现适配。 适配器设计模式在以下场景中适用: 1. 已经存在的类的方法与需求不匹配,需要进行接口转换。 2. 不同产品或不同厂家的类具有相似的功能但接口不相同,需要对它们进行适配。 总结来说,适配器设计模式能够提高类的透明性和复用性,解耦目标类和适配类,提高程序的扩展性。但在编写适配器时需要全面考虑,可能会增加系统的复杂性,并且过度使用适配器可能会导致代码的混乱。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Java设计模式适配器模式](https://blog.csdn.net/qq_37922483/article/details/124568177)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [java设计模式-适配器模式](https://blog.csdn.net/weixin_62862983/article/details/122536241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

田翁野老

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

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

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

打赏作者

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

抵扣说明:

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

余额充值