`

[行为型模式] 模板方法模式的理解

 
阅读更多



头文件
//TemplateMethodPattern.h

#ifndef TEMPLATE_METHOD_PATTERN_H
#define TEMPLATE_METHOD_PATTERN_H

#include <Windows.h>
#include <iostream>
using namespace std;

namespace TemplateMethodPattern
{
    //////////////////////////////////////////////////////////////////////////
    class AbstractClass
    {
    public:
        AbstractClass();
        virtual ~AbstractClass();

        void TemplateMethod();

    protected:
        virtual void PrimitiveOperation1() = 0;
        virtual void PrimitiveOperation2() = 0;
    };

    //////////////////////////////////////////////////////////////////////////
    class ConcreteClassA : public AbstractClass
    {
    public:
        ConcreteClassA();
        virtual ~ConcreteClassA();

    protected:
        virtual void PrimitiveOperation1();
        virtual void PrimitiveOperation2();
    };

    //////////////////////////////////////////////////////////////////////////
    class ConcreteClassB : public AbstractClass
    {
    public:
        ConcreteClassB();
        virtual ~ConcreteClassB();

    protected:
        virtual void PrimitiveOperation1();
        virtual void PrimitiveOperation2();
    };

    //////////////////////////////////////////////////////////////////////////
    void TemplateMethodPattern_Test();
}

#endif

实现
#include "TemplateMethodPattern.h"

namespace TemplateMethodPattern
{
    //////////////////////////////////////////////////////////////////////////
    AbstractClass::AbstractClass()
    {}

    AbstractClass::~AbstractClass()
    {}

    void AbstractClass::TemplateMethod()
    {
        PrimitiveOperation1();
        cout<<"TemplateMethod"<<endl;
        PrimitiveOperation2();
    }

    void AbstractClass::PrimitiveOperation1()
    {
        cout<<"Default Operation1"<<endl;
    }

    void AbstractClass::PrimitiveOperation2()
    {
        cout<<"Default Operation2"<<endl;
    }

    //////////////////////////////////////////////////////////////////////////
    ConcreteClassA::ConcreteClassA()
    {}

    ConcreteClassA::~ConcreteClassA()
    {}

    void ConcreteClassA::PrimitiveOperation1()
    {
        cout<<"ConcreteA Operation1"<<endl;
    }

    void ConcreteClassA::PrimitiveOperation2()
    {
        cout<<"ConcreteA Operation2"<<endl;
    }

    //////////////////////////////////////////////////////////////////////////
    ConcreteClassB::ConcreteClassB(){}
    ConcreteClassB::~ConcreteClassB(){}
    void ConcreteClassB::PrimitiveOperation1()
    {
        cout<<"ConcreteB Operation1"<<endl;
    }

    void ConcreteClassB::PrimitiveOperation2()
    {
        cout<<"ConcreteB Operation2"<<endl;
    }

    //////////////////////////////////////////////////////////////////////////
    void TemplateMethodPattern_Test()
    {
        AbstractClass *pAbstractA = new ConcreteClassA;
        pAbstractA->TemplateMethod();

        AbstractClass *pAbstractB = new ConcreteClassB;
        pAbstractB->TemplateMethod();

        if (pAbstractA) delete pAbstractA;
        if (pAbstractB) delete pAbstractB;
    }
}

客户端
#include "TemplateMethodPattern.h"


#include <iostream>
using namespace std;
using namespace TemplateMethodPattern;

void main()
{
    TemplateMethodPattern_Test();
}

运行结果



用例模型




设计类图


顺序图
分享到:
评论

相关推荐

    设计模式之模板方法模式

    模板方法模式是面向对象设计模式中的行为模式之一,它在Java等面向对象编程语言中有着广泛的应用。模板方法模式的主要思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样,子类可以重写...

    设计模式-模板方法模式ppt

    1. **减少重复代码**:模板方法模式通过将公共行为集中在一个模板方法中,减少了重复代码的数量。 2. **易于扩展**:添加新的子类时只需要重写某些方法,而不需要改变现有的模板方法。 3. **提高可维护性**:由于...

    深入浅出设计模式之模板方法模式

    模板方法模式是一种行为型设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中实现。它使得子类可以在不改变一个算法结构的情况下,重新定义该算法的某些特定步骤。 #### 二、模板方法模式的结构 ...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    1. **模板方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 2. **命令模式**:将请求封装为对象,使得可以使用不同的请求对...

    设计模式--模板方法模式java例子

    模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...

    工厂模式及模板方法模式深度思考

    模板方法模式通常包含一个模板方法(抽象类中的方法),它定义了算法的主要步骤,并可以调用钩子方法(默认实现或空实现)来让子类定制算法的部分行为。 在实际开发中,模板方法模式常用于框架和库的设计,比如...

    模板方法模式案例代码

    模板方法模式是一种设计模式,属于行为设计模式,它在面向对象设计中扮演着重要的角色。这个模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法...

    设计模式C++学习之模板方法模式(Template Method)

    模板方法模式(Template Method)是设计模式中行为型模式的一种,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这个模式在C++编程中有着...

    设计模式-模板方法模式(讲解及其实现代码)

    模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...

    设计模式(十一)之模板方法模式.zip

    模板方法模式是面向对象设计中的一种行为设计模式,它在软件工程中扮演着重要的角色,尤其是在需要维护代码的可扩展性和可复用性时。这个模式的核心思想是封装不变的部分,将可变部分抽象出来,让子类进行扩展。通过...

    模板方法模式例子

    模板方法模式是一种设计模式,属于行为设计模式,它在面向对象设计中扮演着重要的角色。这个模式主要用于定义一个算法的框架,允许子类在不改变整体结构的情况下,对算法的某些步骤进行重写。模板方法模式是基于继承...

    java设计模式-模板模式

    模板模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。此模式定义了一个操作中的算法骨架,而将一些步骤延迟到...在理解和使用模板模式时,应确保正确地划分抽象和具体部分,以保持良好的封装性和灵活性。

    [行为型模式] 解释器模式的理解

    **行为型模式——解释器模式** 解释器模式是一种设计模式,它允许我们为特定语言创建一个解析器。这种模式在处理简单的语言或表达式时特别有用,例如配置文件、简单的编程语言或者数学表达式。解释器模式的核心在于...

    装饰者模式结合模板方法模式实现奶茶商店

    **模板方法模式** 是行为型设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 在奶茶商店的场景中,假设我们已经有了一个...

    模板方法模式与策略模式代码示范

    在软件设计模式中,模板方法模式(Template Method Pattern)和策略模式(Strategy Pattern)是两种常用的结构型设计模式,它们都是面向对象设计中行为模式的一种体现。这两种模式可以帮助我们更好地组织代码,提高...

Global site tag (gtag.js) - Google Analytics