设计模式学习笔记(十六)——Template Method模板方法模式

原创 2007年09月18日 17:58:00
设计模式学习笔记(十六)——Template Method模板方法模式

       今天开始学习设计模式中的第三个类型——行为型模式。

行为模式:

行为型模式涉及到算法和对象间职责的分配。将注意力从控制流转移到对象间的联系方式上来。

       行为模式分为:行为类模式和行为对象模式。行为类模式使用继承机制在类间分派行为;行为对象模式使用对象复合而不是继承。

Template Method模板方法模式

       Template Method模板方法模式介绍:

       Template Method模板方法模式是一种行为型模式,具体点说是行为类型模式。主要解决在软件构建过程中,对于某一项任务,常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因而无法和任务的整体结构同时实现。

       GoF《设计模式》中说道:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

       Template Method模式的结构


       定义场景

       单看结构不好理解,我们来结合程序进行分析。现在定义一个场景:我想大家都玩过极品飞车(我相当喜欢)。游戏中有很多的汽车,但是从操作角度看大同小异。无非是起步(StartUp)、行驶(Run)、停车(Stop)等等行为。汽车行驶的动作之间可能存在着差异,例如:手动档和自动档,但是接口是一样的,换句话说,基本都是这几个动作。结合Template Method模式讲就是在这个程序中,结构(对汽车的操作)是稳定的,但是变化在于各个子步骤(操作行为的具体实现)。

       程序实现与结构分析

       首先我们需要一个汽车的抽象类(结构图中的AbstractClass

       public abstract class AbstractCar

    {

        protected abstract string StartUp();

        protected abstract string Run();

        protected abstract string Stop();

 

        public void DriveOnTheRoad()

        {

            Console.WriteLine(StartUp());

            Console.WriteLine(Run());

            Console.WriteLine(Stop());

        }

}

在这段代码中,抽象方法StartUpRunStop叫做primitive operation(原语操作),它们是在子类中的扩展点,例如我们要编写一辆BORA的实现,在他继承AbstractCar后,可以在这几个primitive operation上进行自己个步骤的实现。

AbstractCar中的DriveOnTheRoad方法叫做template method(模板方法),template methodprimitive operation定义一个算法,是相对稳定的部分。(子类中重新定义primitive operation)。

    然后我们要实现一辆BORA汽车(结构图中的ConcreteClass

    public class BORA : AbstractCar

    {

        protected override string StartUp()

        {

            return "BORA is StartUp";

        }

 

        protected override string Run()

        {

            return "BORA is Running";

        }

 

        protected override string Stop()

        {

            return "BORA is Stoped";

        }

}

接下来我们进行客户程序的实现

class Program

    {

        static void Main(string[] args)

        {

            ClientApp.Drive(new BORA());

            Console.Read();

        }

}

public class ClientApp

    {

        public static void Drive(AbstractCar car)

        {

            car.DriveOnTheRoad();

        }

}

运行结果如下:

BORA is StartUp

BORA is Running

BORA is Stoped

   


Template Method要点

1、  Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为了很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。

2、  除了可以灵活应对子步骤的变化外,“Don't call me.Let me Call you”的反向控制结构是Template Method的典型应用。“Don’t call me.Let me Call you”是指一个父类调用一个子类的操作,而不是相反。

3、  在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将它们设置为protected方法。可以没有具体实现的方法应该称为hook operation(钩子操作),提供了缺省的行为,子类可以在必要时进行扩展。

4、  尽量减少primitive operation,因为需要重新定义的操作越多,客户程序就越长

 

设计模式学习笔记(三):模板方法模式【Template Method】(一) 问题提出

学习自《设计模式之禅》

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

模板模式也是相当简单的一种模式,而且是比较常用的。模板模式是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定...

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

博文很精彩,为方便个人学习特转载,地址:http://www.cnblogs.com/wanggary/archive/2011/04/15/2016619.html 模板模式也是相当简单的一种...
  • phiall
  • phiall
  • 2016年03月17日 22:42
  • 160

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

转自 : http://www.cnblogs.com/wanggary/archive/2011/04/15/2016619.html 模板模式也是相当简单的一种模式,而且是比较常...

设计模式学习笔记---模板方法模式template method pattern(Java版)

一、场景 客服到银行办理业务: 1、取号排队 2、办理具体现金/陷阱/转账/企业/个人/理财业务 3、给银行工作人员评分二、实质 它定义了一个操作中的算法骨架...

Java设计模式学习笔记之 —— 模板方法(Template Method)

跟随郭霖大神的脚步学习设计模式,真是通俗易懂~赞: 原文出处:http://blog.csdn.net/guolin_blog/article/details/8744002模板方法: 定义一个操...

如何让孩子爱上设计模式 ——24.模板方法模式(Template Method Pattern)

如何让孩子爱上设计模式 ——24.模板方法模式(Template Method Pattern)标签: 设计模式初涉描述性文字终于来到23种设计模式的最后一种:模板方法模式,听名字感觉好像很复杂的样子...

设计模式——模板方法模式【Template Method Pattern】

 我先设计个类图:非常简单的实现,你要悍马模型,我就给你悍马模型,先写个抽象类,然后两个不同型号的模型实现类,那我们把这个程序实现出来: HummerModel抽象类的程序清单如下:package t...

我所理解的设计模式(C++实现)——模板方法模式(Template Method Pattern)

概述:      我们最近在开发一个支持多种压缩类型文件的解压缩且制作成pdf的一个应用。对我们的架构来说我们需要支持多种压缩文件类型,但却有固定的操作顺序(先解压缩,在读取里面的文件分析、制作pd...

设计模式——模板方法模式(Template Method)

模板方法属于行为型设计模式,行为型设计模式主要关注对象之间职责分配和算法的问题。类行为型模式使用继承来分配类之间的职责,模板方法就是个类行为型模式。对象行为型模式使用组合来分配职责。在我们构建软件的过...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式学习笔记(十六)——Template Method模板方法模式
举报原因:
原因补充:

(最多只允许输入30个字)