Design Pattern --- Template Method
class View { public: // Interface. void Display() { SetFocus(); DoDisplay(); ResetFocus(); } void SetFocus() { cout <<"View::SetFocus" <<endl; } void ResetFocus() { cout <<"View::ResetFocus" <<endl; } private: // logic. virtual void DoDisplay() { cout <<"View::DoDisplay" <<endl; } }; class MyView : public View { private: // logic. virtual void DoDisplay() { cout <<"MyView::DoDisplay" <<endl; } }; int main() { MyView v; v.Display(); return 0; }
Template Method 是一个非常普遍的设计模式, 核心思想就是固定一部分算法, 如本例中的 Display, 必须先调用 SetFocus, 再调用 DoDisplay, 最后调用 ResetFocus. 然后子类可以通过重载 DoDisplay 实现, 来修改 Display 的行为. "Do-" 前缀命名约定来自于于 Macintosh 应用的 MacApp 框架.