11、[C++]模板方法模式

在微软的WebCast上, 李建中老师有个设计模式的系列讲座, 其中在讲到模板方法(Template Method)曾说: 如果你只想学习一种设计模式就学习模板方法吧. 由此可见它使用的广泛性.

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

模板方法设计模式的意图

通常我们会遇到这样的一个问题: 我们知道一个算法所需的关键步骤, 并确定了这些步骤的执行顺序. 但是某些步骤的具体实现是未知的, 或者说某些步骤的实现与具体的环境相关.

模板方法模式把我们不知道具体实现的步骤封装成抽象方法, 提供一个按正确顺序调用它们的具体方法(这些具体方法统称为"模板方法"), 这样构成一个抽象基类. 子类通过继承这个抽象基类去实现各个步骤的抽象方法, 而工作流程却由父类控制.

情景分析:

还是拿游戏来做例子, 我们玩网游的时候会新建角色, 一般的步骤就是: 选择性别->选择职业->取名->进入游戏, 此时, 我们知道新建角色所需的关键步骤, 但建立不同职业, 不同性别所表现出来的是不同的, 这样, 就可以使用模板方法模式了. 先建立一个模板类, 它有个一个建立角色的公开函数, 还有选择性别/选择职业/取名/进入游戏等几个纯虚函数, 在建立角色的公开函数中, 调用那几个纯虚函数, 然后从这个模板类派生出不同的子类, 子类中实现不同的选择性别/选择职业/取名/进入游戏这些纯虚函数.

class AbstractClass {
protected:
    virtual void PrimitiveOperation1() = 0; // 抽象行为, 放到子类实现
    virtual void PrimitiveOperation2() = 0; // 抽象行为, 放到子类实现

public:
    /************************************************************************
        模版方法, 给出了逻辑的骨架, 而逻辑的组成是一些相应的抽象操作,
        它们推迟到子类实现
    ************************************************************************/
    void TempletMethod() {
        PrimitiveOperation1();
        PrimitiveOperation2();
    }
};

class ConCreteClassA
    : public AbstractClass {
public:
    void PrimitiveOperation1() {
        // 具体的方法1实现
    }

    void PrimitiveOperation2() {
        // 具体的方法2实现
    }
};

class ConCreteClassB
    : public AbstractClass {
public:
    void PrimitiveOperation1() {
        // 具体的方法1实现
    }

    void PrimitiveOperation2() {
        // 具体的方法2实现
    }
};

int _tmain(int argc, _TCHAR* argv[]) {
    AbstractClass* p_1 = new ConCreteClassA();
    p_1->TempletMethod();

    AbstractClass* p_2 = new ConCreteClassB();
    p_2->TempletMethod();

    delete p_1;
    delete p_2;

    return 0;
}
时间: 2024-07-30 20:07:20

11、[C++]模板方法模式的相关文章

java设计模式 模板方法模式Template Method

设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因.

模板方法模式

定义:一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体行为; 意图:定义了一个在操作中的一个算法框架,把一些步骤推迟到子类中去实现.模板方法模式让子类不需要改变算法结构而重定义特定的算法步骤; 比如 Work(){ ①   准备 ②   实施 ③   结束 } 可以将第二步实施声明为抽象方法,因为每个人实施的过程不同 1 public class TemplateDemo{ 2 public static void main(String []atgs){ 3 Teac

9 模板方法模式

模板方法模式(Template Mothod):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. UML类图如下: 要点有两个:原语操作PrimitiveOperation以及钩子Hook()方法. 代码举例 1 public abstract class CaffeineBeverage 2 { 3 public void PrepareRecipe() 4 { 5 BoilWater(); 6 Brew();

学习日记之模板方法模式和 Effective C++

模板方法模式: 定义:定义一个操作中的算法的骨架.而将一些步骤延伸到子类中.模板方法使得子类能够不改变算法的结构就可以重定义该算法的某些特定步骤. (1),用了继承,而且肯定这个继承有意义的情况下.就应该要成为子类的模板,所以反复的代码都应该提升到父类中,而不是让每一个子类去反复. (2).当我们要完毕某一个细节层次一致的过程或者一系列步骤,但其个别步骤在更具体的层次上的实现可能不同一时候.我们通常考虑模板方法模式来处理. (3),模板方法模式通过把不变的行为搬移到超类.去除子类中的反复代码来体

大话设计模式_模板方法模式(Java代码)

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 简单描述:多个类的行为是差不多的,只是某些局部不一样,则交由父类中抽象出这些子类中相同的部分,父类中定义出不同的部分的接口(方法),这些不同部分的方法则由子类去实现,通过多态,实现代码的重用 大话设计模式中的截图: 例子代码: AbstractClass类: 1 package com.longsheng.templatemethod; 2 3 public

《Head First 设计模式》之模板方法模式——冲泡咖啡和茶

模板方法模式(Template) --在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 好莱坞原则:别调用(打电话给)我们,我们会调用(打电话给)你. 要点: 模板方法的抽象类可以定义具体方法.抽象方法和钩子.抽象方法由子类实现. 钩子是一种方法,在抽象类中不做事,或只做默认的事,子类可以选择要不要覆盖它. 为了防止子类改变模板方法中的算法,可以将模板方法声明为final. 好莱坞原则告诉我们,将决策权放在高层模

模板方法模式(Template Method)

一.模板方法模式介绍 模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的 某些特定步骤. 核心:处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定.因此,我们采用工厂方法模式,将这个节点的代码实现转移给 子类完成.即:处理步骤在父类中定义好,具体的实现延迟到子类中定义. 说白了,就是将一些相同操作的代码,封装成一个算法的骨架.核心的部分留在子类中操作,在父类中只把那些骨架做好. 例如: 1.去银行办业务,银行

设计模式之模板方法模式(Template Method)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

设计模式-模板方法模式(the Template Method Pattern)

本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 模板方法模式简介 这是一个被用的相当广泛的一种设计模式,变体也特别多,他建立一个抽象类定义一个算法的结构,但是把细节部分的实现权力交个子类实现,是一种很灵活且代码重用性很高的设计模式. 模板方法模式的定义和基本结构 定义:在一个方法中定义一个算法的骨架,而将其中一些步骤的实现交给子类,模板方法模式使得子类在不改变算法结构的情况下,重新定义了算法中的某些步骤. 一张来自<Head First>