Adapterパターン
Adapter パターン - Wikipedia
上記LINKにある「委譲を利用したAdapter」の方で実装。継承を利用した版はC++だと多重継承になるんでめんどい。
Bannerクラス(Adaptee)が既に手元にある時、それをPrintBanner(Adapter)に委譲して、Printクラス(Target)として使うパターン。Adapteeに手を入れないで再利用できるのがメリット。
#include <cstring> #include <iostream> using namespace std; //Adaptee class Banner { public : Banner(string str){ this->string_ = str; } void ShowWithParen(){ cout << string_.c_str() << endl; } void ShowWithAster(){ cout << "*" << string_.c_str() << "*" << endl; } private : string string_; }; //Target class Print { public : virtual ~Print(){}; virtual void PrintWeak() = 0; virtual void PrintStrong() = 0; }; //Adapter class PrintBanner : public Print { public : ~PrintBanner(){ delete banner_; } PrintBanner(string str) { banner_ = new Banner(str); } void PrintWeak(){ banner_->ShowWithParen(); } void PrintStrong(){ banner_->ShowWithAster(); } private : Banner * banner_; }; int main() { Print *p = new PrintBanner("Hello"); p->PrintWeak(); p->PrintStrong(); delete p; getchar(); return 0; }