目的:复用代码和兼容以前的代码
思想:提供一个中间层,做兼容
方法:“继承”的方式,“委托”的方式
继承关系图:
- 委托方式
- 继承方式
例子:
//原来的打印
class Print
{
public:
void PrintText(string str)
{
cout<< str ;
}
};
//新要求,打印加括号
class NewPrint
{
public:
virtual void PrintText(string str) = 0;
};
//适配层:委托方式
class Adapter: public NewPrint
{
Print print; //委托方式
public:
Adapter(Print print)
{
this->print = print;
}
void PrintText(string str)
{
cout<< "( ";
print.PrintText(str);
cout<< " )" << endl;;
}
};
int main()
{
Print p;
NewPrint* np = new Adapter(p);
np->PrintText("niu bi le!");
return 0;
}
//适配层:继承的方式
class Adapter: public Print, public NewPrint //继承方式
{
public:
void NewPrintText(string str)
{
cout<< "( ";
PrintText(str);
cout<< " )" << endl;;
}
};
int main()
{
NewPrint* np = new Adapter;
np->NewPrintText("niu bi le!");
return 0;
}