设计模式(6)——适配器模式

适配器模式

将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。(对象适配器(一继承一组合)、类适配器(多继承)不推荐使用)

动机

在软件构建过程中,由于应用环境的变化,常常需要把一些现存的对象放在新的环境中使用,但是新的环境要求的接口是现存对象所满足不了的。

角色扮演

抽象目标类(Target)(新的接口或者类)

定义一个客户所需的接口,可以是一个抽象类或接口,也可以是具体类

适配器类(Adapter)

它可以调用另一个接口,作为一个转换器,对Adaptee和Targer进行组合,适配,它是适配器模式的核心

适配者类(Adaptee)(老的接口或者类)

即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类,有客户需要的方法或者实现

举例说明

比如qq会员,各种会员类型,黄砖、黑砖、绿砖、红砖、紫砖、粉砖,不同会员标识,可享受不同的待遇和福利,可以拥有不同的权利,干不同的事。

//目标接口类,
class Target
{
    public:
        Target();
        virtual ~Target();
        virtual void newprocess() = 0;//客户定义的接口
    protected:
    private:
};

//适配器类
class Adapter : public Target
{

    public:
        Adapter( Adaptee* pAdaptee){}
        virtual ~Adapter();
        void newprocess(){   //实现目标类的接口
            cout<< "客户需要的新接口" << endl;
            this->pAdaptee->oldprocess();   //组合适配者的接口
        }
    protected:
    private:
        Adaptee* pAdaptee;  //组合适配者
};

//适配者类,提供旧的接口
class Adaptee
{
    public:
        Adaptee();
        virtual ~Adaptee();
        void oldprocess(){    //旧的接口实现
            cout << "使用了旧的接口 << endl;
        }
    protected:
    private:
};

demo:

int main(){
    Adaptee *adtee = new Adaptee();
    Adapter *adter = new Adapter(adtee);
    adter->newprocess();
return 0;
}

结果:

 

优点

1:将目标类和适配器类解耦,通过引入一个适配器类来重用现有的适配者类,无需修改原有结构

2.:增加了类的 透明性和复用性,将具体的业务实现过程封装在适配器中,对于客户端类而言是透明的,而且提高了适配者的复用性,两全其美,同一适配者类可以在多个不同的系统中复用

3:灵活性和高扩展性都非常好,在不修改原有的代码基础上,选择适配器来扩展业务需要,完全符合开闭原则

缺点

1:一次只能适配一个适配者类,不能同时适配多个适配者

2:适配者类不能为最终类

3:目标抽象类只能为接口,不能为类,使用有一定的局限性

应用场景

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值