锅炉信息网 > 锅炉知识 > 锅炉学习

Adapter 模式

发布时间:

意图:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。动

意图:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。

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

适用性:

1. 你想使用一个已存在的类,而它的接口不符合你的需求

2. 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作

3. (仅仅适用于对象适配器)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

结构:

类适配器:

对象适配器:

参与者

Target : 定义Client使用的与特定领域相关的接口

Client : 与符合Target接口的对象协同

Adaptee:定义一个已经存在的接口,这个接口需要适配

Adapter: 对Adaptee的接口与Target接口进行适配

协作

Client在Adapter实例上调用一些操作。接着适配器调用Adapter的操作实现请求。

效果

1. 用一个具体的Adapter类对Adaptee和Target进行适配。结果是当我们想要匹配一个类以及他的子类的时候,类Adapter将不能胜任工作。

2. 使得Adapter可以重新定义Adaptee的部分行为,因为Adapter是Adaptee的子类

3. 仅仅引入一个对象,并不需要额外的指针以间接得到Adaptee

4. 允许一个Adapter与多个Adaptee-Adaptee本身以及它的所有子类同时工作,Adapter也可以一次给所有的Adaptee添加功能。

5. 使得重定义Adaptee的行为比较困难。

实现:

代码示例如下:

#include <iostream>nclass ITarget{npublic:n virtual ~ITarget(){}n virtual void Process() = 0;nnprotected:n ITarget(){}n};nclass Adaptee{npublic:n void OldInterface(){n std::cout << "exec " << std::endl;n }n};nclass Adapter : public ITarget{npublic:n Adapter(Adaptee *_p){n _adaptee = _p;n }n void Process(){n _adaptee->OldInterface();n }nprivate:n Adaptee *_adaptee;n};nint main(int argc,char *argv[])n{n Adaptee *_p = new Adaptee;n ITarget *target = new Adapter(_p);n target->Process();n delete _p;n delete target;n return 0;n}n

精选推荐

  • 催化燃烧设备供应商
    催化燃烧设备供应商

    催化燃烧设备供应商,催化燃烧处理装置厂家,本装置是采用废气先进入喷淋塔过滤——干式过滤—-蜂窝活性碳吸附—脱附再生——催化燃

  • 该不该有模具供应商
    该不该有模具供应商

    今天红姐又来跟我探讨供应商的管理问题了。故事是这样的:供应商来料不良,原因是模具问题。而那个模具是我们找的一家模具供应商做的

  • 什么牌子高压锅好,高压锅哪个牌子好,高压锅什么牌子好,高压锅哪个品牌好
    什么牌子高压锅好,高压锅哪个牌子好,高

    1苏泊尔 双重安全阀门 高压锅双重安全阀,防烫把手,复合底。这款高压锅拥有双重安全阀门,更好的保证使用安全。搭载防烫伤把手,方便起

  • 高压锅啥牌子好,高压锅哪个牌子的好,什么高压锅牌子好,高压锅推荐选购指南
    高压锅啥牌子好,高压锅哪个牌子的好,什

    1、双喜阶梯型复底高压锅推荐理由:高压锅满足上蒸下煮,饭菜同时进行,方便快速,有效提升烹饪效率。多重安全防护,安全系数较高,家人使用

0