目的:复用代码和兼容以前的代码
思想:提供一个中间层,做兼容
方法:“继承”的方式,“委托”的方式
继承关系图:
- 委托方式
- 继承方式
例子:
//原来的打印 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; }