1. 先贴源码
#include <string>
#include<iostream>
using namespace std;
class LegacyRectangle
{
public:
LegacyRectangle(double x1, double y1, double x2, double y2)
{
_x1 = x1;
_y1 = y1;
_x2 = x2;
_y2 = y2;
}
void LegacyDraw()
{
cout << "LegacyRectangle:: LegacyDraw()" << _x1 << " " << _y1 << " " << _x2 << " " << _y2 << endl;
}
private:
double _x1;
double _y1;
double _x2;
double _y2;
};
class Rectangle
{
public:
virtual void Draw(string str) = 0;
};
// 第一种实现适配器的方式: 使用多重继承
class RectangleAdapter: public Rectangle, public LegacyRectangle
{
public:
RectangleAdapter(double x, double y, double w, double h) :
LegacyRectangle(x, y, x + w, y + h)
{
cout << "RectangleAdapter(int x, int y, int w, int h)" << endl;
}
virtual void Draw(string str)
{
//在新接口内,不仅可以调用原有的老的绘图接口
LegacyDraw();
//还可以新增提示用户语句,例如实现语音播报:系统即将绘图!(此处以cout输出到终端代替)
cout << "RectangleAdapter::Draw()" << endl;
}
};
// 第二种实现适配器的方式:使用组合方式
class RectangleAdapter2 :public Rectangle
{
private:
LegacyRectangle _lRect;
public:
RectangleAdapter2(double x, double y, double w, double h) : _lRect(x, y, x + w, y + h)
{
cout << "RectangleAdapter2(int x, int y, int w, int h)" << endl;
}
virtual void Draw(string str)
{
cout << "RectangleAdapter2::Draw()" << endl; _lRect.LegacyDraw();
}
};
int main()
{
double x = 20.0, y = 50.0, w = 300.0, h = 200.0;
RectangleAdapter ra(x, y, w, h);
Rectangle* pR = &ra;
pR->Draw("Testing Adapter");
cout << endl;
RectangleAdapter2 ra2(x, y, w, h);
Rectangle* pR2 = &ra2;
pR2->Draw("Testing2 Adapter");
return 0;
}
适配器模式个人理解:
有两种实现方式:1. 多重继承方式 ; 2. 组合方式
1. 多重继承方式
适配器类可以继承于原接口API类和新接口API类,
适配器类构造的时候负责初始化原有接口API类的对象模型,
适配器类需要实现新接口API类内的纯虚函数,并在其中调用原有接口API。。
最后通过新接口API类内的纯需函数接口,以多态的方式,来达到调用适配器内的原有接口API。
感悟: 适配器需要获得访问老接口的能力, --重点1
适配器对内实现了老->新接口API的转换, --重点2
对外,由于其虚继承于新接口类,所以又可以通过新接口类被外部访问。 --重点3
2. 组合方式
对多重继承方式内的重点1 、 重点2 、重点3的理解,是本质, 上述理解,依然适用组合方式。
只是重点1发生了变化, 适配器需要获得访问老接口的能力,之前是通过继承方式,现在是通过组合方式。
设计模式这种东西,看博客仅仅是知道怎么回事,如果需要熟练使用,最好是结合项目。
.
/************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/