适配器模式(adapter)C++实现

意图:将一个类的接口转换成客户希望的另一个接口。

适用性:1.你想使用一个已存在的类,而它的接口不符合你的需求。

    2.你想创建一个可以复用的类,该类可以与其它不相关的类或不可预见的类协同工作。

    

类适配器结构:

类适配器效果:1.仅仅引入一个对象,并不需要额外的指针以间接得到adaptee。

       2.当我们想要匹配一个类以及它所有的子类时,类适配器将无法完成。

       3.使得Adapter可以重新定义Adaptee的部分行为。

类适配器代码:


#ifndef _ADAPTER_
#define _ADAPTER_
#include <iostream>
using namespace std;


class Target{
public:
Target(){}
virtual void JulySeven()
{
cout<<"中国人过情人节 ";
}

};
class Adaptee{
public:
Adaptee(){}
virtual void March14th()
{
cout<<"美国人过情人节 ";
}
};


class AdapterClass: public Target, public Adaptee{
public:
AdapterClass(){}


public:
virtual void JulySeven()
{
March14th();
}
};



#endif

 

中国在七月七日过情人节,美国在三月十四过情人节。

现在要实现七月七日美国人过情人节:

#include <iostream>
#include "Adapter.h"
using namespace std;

int main()
{
Target* target = new Target;
cout<<"7月7日";
target->JulySeven();

//类适配器
target = new AdapterClass;
cout<<"7月7日";
target->JulySeven();

//对象适配器
target = new AdapterObject;
cout<<"7月7日";
target->JulySeven();

return 0;
}

对象适配器结构:

对象适配器效果:

1.允许能完成与Adaptee以及它所有子类一起工作。

2.使得重新定义Adaptee的行为比较困难。

用对象适配器方法就将Festival代码改成如下:

class AdapterObject: public Target{
public:
AdapterObject()
{
pFestival = Adaptee();
}

virtual void JulySeven()
{
pFestival.March14th();
}

private:
Adaptee pFestival;
};

原文地址:https://www.cnblogs.com/wrbxdj/p/4173596.html