Hello,阳光柠檬! 养成记录笔记的好习惯

适配器模式(Adapter)

2016-02-18
C++

Adapter 模式的两种类别:类模式 和 对象模式。

类模式的 Adapter 实现:

//Adapter.h
#ifndef _ADAPTER_H_
#define _ADAPTER_H_
class Target
{
public:
    Target();
    virtual ~Target();
    virtual void Request();
protected:
private:
};
class Adaptee
{
public:
    Adaptee();
    ~Adaptee();
    void SpecificRequest();
protected:
private:
};
class Adapter:public Target,private Adaptee
{
public:
    Adapter();
    ~Adapter();
    void Request();
protected:
private:
};
#endif //~_ADAPTER_H_
//Adapter.cpp
#include "Adapter.h"
#include <iostream>
Target::Target()
{
}
Target::~Target()
{
}
void Target::Request()
{
    std::cout<<"Target::Request"<<std::endl;
}
Adaptee::Adaptee()
{
}
Adaptee::~Adaptee()
{
}
void Adaptee::SpecificRequest()
{
    std::cout<<"Adaptee::SpecificRequest"<<std::endl;
}
Adapter::Adapter()
{
}
Adapter::~Adapter()
{
}
void Adapter::Request()
{
    this->SpecificRequest();
}

对象模式的 Adapter 实现:

//Adapter.h
#ifndef _ADAPTER_H_
#define _ADAPTER_H_
class Target
{
public:
    Target();
    virtual ~Target();
    virtual void Request();
protected:
private:
};
class Adaptee
{
public:
    Adaptee();
    ~Adaptee();
    void SpecificRequest();
protected:
private:
};
class Adapter:public Target
{
public:
    Adapter(Adaptee* ade);
    ~Adapter();
    void Request();
protected:
private:
    Adaptee* _ade;
};
#endif //~_ADAPTER_H_
//Adapter.cpp
#include "Adapter.h"
#include <iostream>
Target::Target()
{
}
Target::~Target()
{
}
void Target::Request()
{
    std::cout<<"Target::Request"<<std::endl;
}
Adaptee::Adaptee()
{
}
Adaptee::~Adaptee()
{
}
void Adaptee::SpecificRequest()
{
    std::cout<<"Adaptee::SpecificRequest"<<std::endl;
}
Adapter::Adapter(Adaptee* ade)
{
    this->_ade = ade;
}
Adapter::~Adapter()
{
}
void Adapter::Request()
{
    _ade->SpecificRequest();
}

对象模式的使用

//main.cpp
#include "Adapter.h"
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
    Adaptee* ade = new Adaptee;
    Target* adt = new Adapter(ade);
    adt->Request();
    return 0;
}

Comments

Content