适配器模式
由于环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象不满足的。主要应对迁移变化。
适配器模式:将一个类的接口转换成客户希望的另一个接口。使得将原本由于接口不兼容而不能一起工作的那些类可以一起工作。
#include<iostream>
using namespace std;
//目标接口
class ITarget {
public:
virtual void process() = 0;
virtual ~ITarget() {}
};
//遗留接口
class IAdaptee {
public:
virtual void foo(int data) = 0;
virtual int bar() = 0;
virtual ~IAdaptee(){}
};
//遗留类型
class OldClass :public IAdaptee {
//
void foo(int data) override {
cout << "foo" << endl;
}
int bar() override {
return 1;
}
};
//对象适配器
class Adapter :public ITarget {
protected:
IAdaptee* pAdaptee;
public:
Adapter(IAdaptee* p) :pAdaptee(p){}
virtual void process() {
int data = pAdaptee->bar();
pAdaptee->foo(data);
}
};
int main()
{
Adapter* adap = new Adapter(new OldClass());
adap->process();
delete adap;
return 0;
}
结果如下:
要点:
1、Adapter应用于: 希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。在遗留代码复用、类库迁移等方面有用。
2、对象适配器采用对象组合的方式,复合松耦合;类适配器采用多继承的方式,不推荐。