C++常用设计模式之:适配器模式

适配器模式是软件开发中常用的模式之一,比如我们之前写的类提供的接口(老的接口)在新的环境下已经不合适了,那么我们怎么改变才能使老的接口适配现在新的接口呢?之前说过设计模式中常用的手法就是组合和继承,这在适配器模式中得到了很好的体现。首先,我们要从新的接口继承一个类,这个类就是适配器类(为什么要从新接口继承?那是为了遵循新接口提供的接口规范),那这个适配器类要怎么去适配老的接口呢?很显然的办法是组合,即在适配类中提供一个老接口的字段

适配器模式的定义:将一个类的接口转换成客户希望的另外一个接口,从而使原本由于接口不兼容而不能一起工作的类可以一起工作。

用现实中的列子来类比,比如我们常见的电源适配器,就是将原来的接口(不合适的电压),转换成现在可用的接口(合适的电压)。

UML结构图如下:

                                       

下面我用伪码来表述上面的例子。

//首先我们来看新的接口,即目标接口
class ITarget
{
public:
     virtual void process()=0;//处理问题的新方法
}

//这个是老的接口,即源接口
class ISource
{
public:
     virtual void step1()=0;
     virtual void step2()=0;
}

//噔噔噔....适配器类登场
class Adapter : public ITarget
{
protected:
     ISource * m_pSource;//老接口的指针
public:
     Adapter(ISource * pSource)//构造函数,外界需要传一个老接口的指针进来
     {
       m_pSource = pSource;
     }
     void process()//遵循新接口
     {
        //利用老接口的特性,做相应的处理,使其满足现在的需求
        pSource->step1();
        ......
        pSource->step2();
        ......
     }
}
//现在可以开始用电源适配器了

//老的电压
class OldVoltage : public ISource
{
public:
     virtual void step1() {}
     virtual void step2() {}
};


int main()
{
    //老的电压遵循老的接口
    ISource *pOld = new OldVoltage();

    //用适配器来转换
    ITarget *pTarget = new Adapter(pOld);
    pTarget->process();//好了,老的电压可以用了 
}

现在返回那张UML图我们再来看:

                                 

结合到我们的例子和适配器模式的定义,其中稳定的部分就是目标接口类和源接口类,而变化的是适配器类,因为如果有新的目标接口的话适配器类就做出相应的改变,以适应新的接口。我们通过继承的方式来得到新接口的接口规范(就是要用它的虚函数),然后通过组合的方式(就是包含一个老接口的指针作为适配器类的成员)得到老接口的某些使用方法从而达到适应新接口的目的。

最后,如果理解的有偏差,还请指出!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值