模板方法(Template Method)模式:定义一个操作中的算法的骨架,而将一些步骤延

迟到子类中。

组成

1) 抽象类(Abstract Class):定义了一到多个的抽象方法,以供具体的子类来实现它们;

而且还要实现一个模板方法,来定义一个算法的骨架。该模板方法不仅调用前面的抽象

方法,也可以调用其他的操作,只要能完成自身的使命。

2) 具体类(Concrete Class):实现父类中的抽象方法以完成算法中与特定子类相关的步骤。

// 抽象基类,定义算法的轮廓

class AbstractClass

{

public:

     AbstractClass(){}

     virtual ~AbstractClass(){}

 

     // 这个函数中定义了算法的轮廓

     void TemplateMethod();

 

protected:

     // 纯虚函数,由派生类实现之

     virtual void PrimitiveOperation1() = 0;

     virtual void PrimitiveOperation2() = 0;

};

 

// 继承自AbstractClass,实现算法

class ConcreateClass

     : public AbstractClass

{

public:

     ConcreateClass(){}

     virtual ~ConcreateClass(){}

 

protected:

     virtual void PrimitiveOperation1();

     virtual void PrimitiveOperation2();

};

#include "TemplateMethod.h"

#include <iostream>

 

void AbstractClass::TemplateMethod()

{

     PrimitiveOperation1();

     PrimitiveOperation2();

}

 

void ConcreateClass::PrimitiveOperation1()

{

     std::cout << "PrimitiveOperation1 by ConcreateClass\n";

}

 

void ConcreateClass::PrimitiveOperation2()

{

     std::cout << "PrimitiveOperation2 by ConcreateClass\n";

}

int main()

{

     AbstractClass* pConcreateClass = new ConcreateClass;

     pConcreateClass->TemplateMethod();

 

     delete pConcreateClass;

 

     system("pause");

 

     return 0;

}

posted on 2012-01-11 19:55 柳清风 阅读(151) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


统计