面向对象设计模式学习笔记八适配器模式

为什么需要适配器模式?

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

在实际项目中,经常需要迁移老的类库,适应新的接口,这也是适配器模式的主要职责之一。

什么是适配器模式?

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

类图

特点:

Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。

一般推荐使用对象适配器,而不推荐使用类适配器。

实例:

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

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

//目标接口(新接口)
class ITarget{
public:
    virtual void process()=0;
};

//对象适配器
class Adapter: public ITarget{ //继承
protected:
    IAdaptee* pAdaptee;//组合
    
public:
    
    Adapter(IAdaptee* pAdaptee){
        this->pAdaptee=pAdaptee;
    }
    
    virtual void process(){
        int data=pAdaptee->bar();//老的接口经过转换变成新的接口
        pAdaptee->foo(data);
        
    }
    
    
};

//使用
int main(){
    IAdaptee* pAdaptee=new OldClass();
    
    
    ITarget* pTarget=new Adapter(pAdaptee);
    pTarget->process();
    
    
}

 

备注:

A类组合了一个B类,最好在A构造函数中对B类进行初始化;接口一定要有实现来初始化。

Protect和private叫实现继承:并没有继承你的接口,但是我利用了你的实现。Public继承是公有继承是接口继承。

 

 


版权声明:本文为sinat_22991367原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。