`

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

 
阅读更多



头文件
//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设计模式之行为模式

    这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...

    设计模式课件大全

    设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于...

    Java 设计模式详解超详细(含示例代码)

    行为型模式则关注对象的交互和职责分配,包括观察者模式、策略模式、模板方法模式等。 使用设计模式的好处包括: 提高软件的可维护性和可复用性,因为设计模式提供了通用的设计语言和最佳实践。 使代码更易于理解和...

    设计模式 GOF 23

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    设计模式:可复用面向对象软件的基础--详细书签版

    5.10 template method(模板方法) —类行为型模式 214 5.11 visitor(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被...

    设计模式精解及面试攻略

    第6章阐释行为模式(职责链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者模式);第7章针对所有设计模式向初学者提供一些提示;第8章包括常见的面试问题及实际示例;第9章涵盖Java...

    设计模式Demo

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 二、设计...

    ASP.NET设计模式-杨明军译(源码)

    1.3.5 基本模式、行为模式和结构模式 1.4 其他有名的设计实践 1.4.1 测试驱动设计 1.4.2 领域驱动设计 1.4.3 行为驱动设计 1.5 小结 第2章 剖析模式的模式 2.1 如何阅读设计模式 2.1.1 GoF模式模板 2.1.2...

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码

    书中应用GoF的经典设计模式,介绍了如何在代码中应用创建型模式、结构型模式和行为模式,如何设计模式以巩固应用程序,并通过设计模式实例介绍MVC在CocoaTouch框架中的工作方式。 《Objective-C编程之道:iOS设计...

    C#设计模式(含随书源码)

    然后分别讲述了创建型模式、结构型模式和行为型模式。每一类设计模式又包括若干种具体模式,共有23种。在介绍每种模式时,给出了一个或多个应用该模式的示例,以便于理解,且这些示例都是能完全运行的程序,包含在随...

    深入理解JavaScript系列(41):设计模式之模板方法详解

    模板方法是一种代码复用的基本技术,在类库中尤为重要,因为他们提取了类库中的公共行为。模板方法导致一种反向的控制结构,这种结构就是传说中的“好莱坞法则”,即“别找找我们,我们找你”,这指的是父类调用一个...

    Java的23种设计模式疯狂Java总结.doc

    设计模式3 1.1 创立型模式4 1.1.1 工厂方法4 1.1.2 抽象工厂6 1.1.3 建造...行为型模式37 1.3.1 责任链模式37 1.3.2 命令模式40 1.3.3 解释器模式43 1.3.4 迭代器模式45 1.3.5 中介者模式49 1.3.6 备忘录模式52 1.3.7 ...

    DesignPattern:23种设计模式,Android原始设计模式分析-android

    创建型模式5种单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式结构型模式7种适配器模式,装饰器模式,代理模式,外观模式,替代模式,组合模式,享元模式行为型模式11种策略模式,模板方法模式,观察者...

    java-design-patterns:Java 设计模式学习笔记

    将创建与使用代码解耦结构型模式作用:将不同的功能代码解耦桥接模式装饰器模式适配器模式外观模式组合模式享元模式行为型模式(更新中...)作用:将不同的行为代码解耦观察者模式模板方法模式策略模式职责链模式...

    java-patterns:Java 23种基本的设计模式整料整理学习,责任链模式过滤器,工厂模式BeanFactory,观察者模式ContextListen等。结合Spring源码理解学习

    行为类型模式,共十种:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,注释模式,状态模式,访问者模式,中介者模式,解释器模式。 设计模式的六大原则 开闭原则(Open Close Principle)...

    java餐饮管理系统源码-pattern:设计模式扫盲,以身边故事来讲解设计模式

    模板方法模式 解释器模式 写在前面: UML图解 继承和实现是比较容易理解的两种类关系。在架构设计中,要注意组合、聚合和 依赖这三者的区别。 组合在 语中的含义是把若干个独立部分组成整体 各个部分都有其 立的使用...

    java-design-patterns:java 学习模式

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 设计模式之UML 类图以及类间关系(泛化 、实现、依赖...

Global site tag (gtag.js) - Google Analytics