Design Pattern Template Method

来源:互联网 发布:centos共享文件夹 编辑:程序博客网 时间:2024/05/22 06:35

      【适用性】

     (1)一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

     (2)各子类中公共的行为应被提取出来并集中到一个公共的父类中来避免代码重复。

     (3)  控制子类扩散。

 

      【引用】

         TEMPLATE METHOD——看过《如何说服女生上床》这部经典文章吗?女生从认识到上床的不变的步骤分为巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去八大步骤(Template method),但每个步骤针对不同的情况,都有不一样的做法,这就要看你随机应变啦(具体实现);

  模板方法模式:模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。

        【示范代码】

view.h


class View{

public:
  View();
  virtual ~View()=0;
  void Display();
  void SetFocus();
  void ResetFocus();

  virtual void DoDisplay() = 0;
};

view.cpp

View::View (){}

View::~View(){
      std::cout <<"View destructor"<<std::endl;
}

void View::Display(){
     SetFocus();
     DoDisplay();
     ResetFocus();
}

void View::SetFocus(){}

void View::ResetFocus(){}

MyView.h

class MyView : public View{

public:
 MyView();
 virtual ~MyView();

 virtual void DoDisplay();

private:

 ////
};

MyView.cpp

MyView::MyView(){}

MyView::~MyView()
{
 std::cout<<"MyView destructor"<<std::endl;
}

void MyView::DoDisplay()
{
 std::cout <<"MyView DoDisplay"<<std::endl;
}

 

int _tmain(int argc, _TCHAR* argv[])
{
 
 MyView view;
 view.DoDisplay ();

 View *p = new MyView;
 p->DoDisplay ();

 delete p;

 return 0;
}

 

        说白了,就是基类给出一个函数的抽象实现,而子类继承下来之后,自己实现具体的实现。

 

 

 

 

 

 

        

原创粉丝点击