结构型设计---适配器模式

适配器

定义:

提供给客户(暂定为client)的接口(接口类定为target)不能满足功能。

但是客户端的内容不希望变化,通过重写target, 完成功能迁移-》适配。

引入一个适配者类和适配器类。其中适配者类为clien类的子类,

通过适配者引入适配器完成新功能。保持对外提供的类的接口不变化。

优点:

1、解耦、对外透明、灵活性好。通过配置文件可以灵活引入。

2、一个适配者可以引入多个适配器。灵活。

对象适配器:

 

类适配器:

 

两个实现Demo

demo1:

#include<iostream>
#include "Adapter.h"
#include "Adaptee.h"
#include "Target.h"

using namespace std;


int main(int argc, char *argv[])
{
    Adaptee* adaptee = new Adaptee();
    //不改变Target 重写Target
    Target* tar = new Adapter(adaptee);

    tar->requst();

}


///
//    Adapter.h
//
///

#ifndef __ADAPTER_H__
#define __ADAPTER_H__

#include "Target.h"
#include "Adaptee.h"

class Adapter : public Target{

//不改变原接口的前提,重写方法
    public:
        Adapter(Adaptee* adaptee){};
        virtual ~Adapter(){};

        virtual void requst();

    private:
        Adaptee* m_padaptee;
};



#endif

/
//Adapter.cpp
//


#include "Adapter.h"

Adapater::Adapter(Adaptee* adaptee){
       m_adaptee = adaptee;
}

Adapter::~Adapter(){};
void Adapter::request(){
    //通过适配者方法,引入适配器的方法实现
    m_adaptee->specifiRequest();
}

//
//Adaptee.h


#ifndef __ADAPTEE_H__
#define __ADAPTEE_H__

class Adaptee {

    Adaptee(){
    };
    virtual ~Adaptee(){
    };

    void sepcifiRequest();

};

#endif

demo2

#ifndef __ADAPTER_PATTERN_H
#define __ADAPTER_PATTERN_H

#include <iostream>
#include <string.h>
#include <mutex>

using namespace std;

//目标者类

class Target{
public:
    Target(){};
    virtual ~Target(){};
    virtual void pathPlanning() = 0; //纯虚函数
private:

};

//适配器类1 适配器完成新功能1

class Adapteeone
{
    Adapteeone(){
    };
    ~Adapteeone(){};
    void onetest1(){
    printf("onetest1\n");
    }

}

//适配器类2 适配器完成功能2 

class Adapteetwo
{
    Adapteetwo(){};
    ~Adaptetwto(){};
    void twotest2(){
    printf("twptest2\n");
    }
    
}

//通过适配者类完成适配器功能和目标功能的链接。
class Adapter : public Target{
    public:

    Adapter(){
        //完成适配器的初始化,或者直接以参数形式初始化
        adapteeone = new Adapterone();
        daptertwo = new Adaptertwo();

    };
    
    virtual ~Adapter(){};
    
    void pathPlanning(){
        //狸猫换太子
        adapteeone->onetest1();
        adapteetwo->twotest2();

    }

    private:
    Adapteeone* adapteeone;
    Adapteetwo* adapteewtwo;

}


#endif
///
//main.cpp
//
///

#include <iostream>
#include "AdapterPattern.h"

int main()
{
    //在创建目标类的时候进行替换重新的适配器
    Target* tar = new Adapter();
    
    tar->pathPlanning();
    delete tar;
    return 0;

    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值