适配器: 将一个类的接口转化为客户希望的另外一个接口。使得原本由于接口不兼容而不能组合在一起工作的那些类可以一起工作。
使用适配器的原因: 有的情况下,有些类不能复用的原因仅仅是接口不兼容。
比如:我们有一个继承体系,父类F拥有抽象方法GetCount,返回成员个数。用户希望使用F类的GetCount接口,而又有一个类T只有方法ListMem返回所有的成员。如何才能复用类T呢? 给出一个中间类,继承F的方法,而通过类T实现GetCount就是一种解决方法。
适配器从实现上划分,可以分为:类适配器和对象适配器。
类适配器即:通过类的继承来实现适配。一般是通过public继承要实现的方法,private继承要适配的对象。这样public继承会使得用户依旧可以访问适配出来的方法,private继承保证了要适配对象的透明,用户不可见。
对象适配器:还是通过public继承要实现的抽象方法,但是通过适配器中包含要适配的类的对象来实现该方法,达到适配的效果。
上述的例子代码如下:
class F {
public:
vitual GetCount(void);
};
class T {
public:
virtual ListMem(vector<int> vec);
};
class AdapterClass : public F, private T {
public:
virtual GetCount(void) {
ListMem(vec);
....
}
};
class Adapter : public F {
public:
virutal GetCount(void) {
_t->ListMem(vec);
...
}
private:
T *_t;
};