设计模式之适配器模式

1、适配器模式(Apater)将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

2、适配器模式主要解决什么问题呢?

答:简单地说,就是需要的东西就在面前,但却不能使用,而短时间又无法改造它,于是我们就想办法适配它。

3、系统的数据和行为都正确,但接口不符合时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,比如需要对早期代码复用一些功能等应用上很有实际价值。

UML图如下:


根据上图我们知道参与者有:

Target

----定义Client使用的与特定领域相关的接口。

Client

----与符合Target接口的对象协同。

Adaptee

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

Adapter

----对Adaptee的接口与Target接口进行适配。

4、何时使用适配器模式?

答:使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑用适配器模式,这样客户代码可以统一调用接口就行了,这样应该可以更简单,更直接,更紧凑。

注意:适配器模式不是在一开始有不同的时候就使用它,而是在不容易修改的时候再使用。


5、C++代码实现

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
using  namespace std;

/* Target(这是客户所期待的接口,
    目标可以是具体的或抽象的类,也
    可以是接口)代码如下:  */

class Target
{
public:
     virtual  void Request()
    {
        cout <<  "普通请求" << endl;
    }
};

/* 需要适配的类,代码如下: */
class Adaptee
{
public:
     void SpecificRequest()
    {
        cout <<  "特殊请求" << endl;
    }
};

/* Adapter(通过在内部包装一个Adpatee对象,把源
    接口转换成目标接口)代码如下: */

class Adapter :  public Target
{
private:
    Adaptee adaptee;
public:
     void Request()
    {
        adaptee.SpecificRequest();
    }
};

/* 客户端代码 */
int main()
{
    Target *p_target =  new Adapter();
    p_target->Request();
     return  0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值