[设计模式] —— Adapter 适配器模式

Adapter 适配器模式

属于接口隔离模式,在组件构建过程中,某些接口之间直接的依赖经常会带来很多的问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来就互相紧密关联的接口是一种常见的解决方式。

动机

在软件系统中,由于应用环境变换,常需要将”一些现在的对象“ 放在新的环境中应用,但是新环境要求的接口是这些现有对象所不满足的。

如何应对这种”迁移式变化“?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所需求的接口?

定义

将一个类的接口转换成客户希望的另一个接口.

示例代码
class ITarget {
public:
 virtual void process() = 0;
};

// 老接口
class IAdaptee {
public:
 virtual void foo(int data) = 0;
 virtual int bar() = 0;
};

// 遗留类型
class OldClass : public IAdaptee {
    // ...
};

// 对象适配器
class Adapter : public ITarget {
protected:
 IAdaptee* pAdaptee; // 组合

public:
 Adapter(IAdaptee* a) : pAdaptee(a) {}

 virtual void process() {
     int data = pAdaptee->bar();
     pAdaptee->foo(data);
 }
};

// 类适配器
class Adapter : public ITarget, protected OldClass { // 多继承
    
};

int main() {
    IAdaptee* pAdaptee = new OldClass();

    ITarget* pTarget = new Adapter(pAdaptee);
    pTarget->process();
}

通过组合的方式,在新的适配器中使用老的接口来实现新的同名接口。可以类适配,也可以对象适配。

结构图

对象适配:

类适配:

总结
  • Adapter 适配器模式一般应用在”希望复用一些现存的类,但是接口又与复用环境要求不一致的情况“,在遗留代码复用、类库迁移等方面很有用。
  • Adapter 适配器模式既可以对象适配也可以类适配,对象适配使用组合的形式,更松耦合,类适配则使用多继承的方式,不推荐使用。
  • Adapter 适配器模式可以实现的非常灵活,只要是用老的接口方法实现新的接口,来达到适配的目的即可。

其他设计模式汇总:
[设计模式] —— 设计模式的介绍及分类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值