Template Method パターン
Template Method パターン - Wikipedia
AbstractDisplay(AbstractClass)で処理の骨組みを規定して、CharDisplay・StringClass(ConcreteClass)で処理の内容を具体化。
#include <iostream> #include <string> using namespace std; //AbstractClass class AbstractDisplay { public: virtual void Open() = 0; virtual void Print() = 0; virtual void Close() = 0; void Display(){ Open(); for(int i = 0; i < 5; i++){ Print(); } Close(); } }; //ConcreteClass class CharDisplay : public AbstractDisplay { public: CharDisplay(char ch){ ch_ = ch; } void Open(){ cout << "<<"; } void Print(){ cout << ch_; } void Close(){ cout << ">>" << endl; } private : char ch_; }; class StringDisplay : public AbstractDisplay { public: StringDisplay(string str){ string_ = str; } void Open(){ PrintLine(); } void Print(){ cout << "|" << string_ << "|" << endl; } void Close(){ PrintLine(); } private : string string_; void PrintLine(){ cout << "+"; for(unsigned int i = 0; i < string_.length(); i++){ cout << "-"; } cout << "+" << endl; } }; //main int main() { AbstractDisplay * abstract_display = new CharDisplay('H'); AbstractDisplay * abstract_display2 = new StringDisplay("Hello, world!"); abstract_display->Display(); abstract_display2->Display(); delete abstract_display; delete abstract_display2; getchar(); return 0; }