您的位置:首页 > 编程语言 > C语言/C++

常见设计模式的解析和实现(C++)之十一-TemplateMethod模式

2007-06-25 10:06 886 查看
作用:

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

UML结构图:



抽象基类:

1)AbstractClass:抽象基类,定义算法的轮廓

解析:

TemplateMethod 的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类.但是这样也会造成设计的灵活性不高的缺点,因为轮廓已经定下来了要想改变就比较难了,这也是为什么优先采用聚合而不是继承的原因.

实现:

1)TemplateMethod.h


/********************************************************************


created: 2006/07/20


filename: TemplateMethod.h


author: 李创


http://www.cppblog.com/converse/




purpose: TemplateMethod模式的演示代码


*********************************************************************/




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


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();


};

/**/




2)TemplateMethod.cpp


/********************************************************************


created: 2006/07/20


filename: TemplateMethod.cpp


author: 李创


http://www.cppblog.com/converse/




purpose: TemplateMethod模式的演示代码


*********************************************************************/




#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";


}




/**/






3)Main.cpp


/********************************************************************


created: 2006/07/20


filename: Main.cpp


author: 李创


http://www.cppblog.com/converse/




purpose: TemplateMethod模式的测试代码


*********************************************************************/




#include "TemplateMethod.h"


#include <stdlib.h>




int main()




{


AbstractClass* pConcreateClass = new ConcreateClass;


pConcreateClass->TemplateMethod();




delete pConcreateClass;




system("pause");




return 0;


}


/**/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: