那谁的技术博客

感兴趣领域:高性能服务器编程,存储,算法,Linux内核
随笔 - 210, 文章 - 0, 评论 - 1183, 引用 - 0
数据加载中……

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

作用:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。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;
}

posted on 2006-07-27 23:06 那谁 阅读(1809) 评论(2)  编辑 收藏 引用 所属分类: 设计模式

评论

# re: 常见设计模式的解析和实现(C++)之十一-TemplateMethod模式   回复  更多评论   

继承型的行为模式

和STL算法模板 + functor思想相似
不过一个编译时静态、一个运行时动态
2006-07-28 09:46 | Arcrest

# re: 常见设计模式的解析和实现(C++)之十一-TemplateMethod模式   回复  更多评论   

楼主写的 这个系列 很好啊 ,我要好好学习了
@Arcrest
2007-03-23 09:24 | waitng

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理