快速业务通道

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

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

作用:

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

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号