设计模式(14) 模板方法模式

模板方法模式

模板方法模式是面向对象系统中非常朴实的一种模式,体现出面向对象设计中继承和多态的基本特征。在开发应用的过程中,往往会在初期规划一些较粗粒度的算法,而且对参与计算的对象进行抽象,明确算法会使用到哪些方法,每个方法可以提供哪些支持,但此时每个方法本身并没有细化;随着开发过程的展开,我们可能会具体实现每个方法,或者对最初的一些方法进行替换,覆盖上新的内容,这样就在一个相对固定的算法框架下,通过子类(或其他方法)的变化,实现了算法的差异性。

GOF对模板方法模式的描述为:
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method let ssubclasses redefine certain steps of an algorithm without changing the algorithm's structure..
— Design Patterns : Elements of Reusable Object-Oriented Software

UML类图:

代码示例:

public abstract class Template
{
    public abstract void Init();
    public abstract void Start();
    public abstract void End();

    public void Process()
    {
        Init();
        Start();
        End();
    }
}

public class ConcreteProcessor1 : Template
{
    public override void End()
    {
        Console.WriteLine("Process1 End");
    }

    public override void Init()
    {
        Console.WriteLine("Process1 Init");
    }

    public override void Start()
    {
        Console.WriteLine("Process1 Start");
    }
}

public class ConcreteProcessor2 : Template
{
    public override void End()
    {
        Console.WriteLine("Process2 End");
    }

    public override void Init()
    {
        Console.WriteLine("Process2 Init");
    }

    public override void Start()
    {
        Console.WriteLine("Process2 Start");
    }
}

适用场景

  • 在实现一个算法时,发现其中有些部分非常易变,或者很容易随着运行环境、后续开发的不同产生而很多变化,此时就按照模板方法模式可以把它们抽象出来,供子类完成。
  • 在需要对一系列子类进行约束,要求它们必须实现算法要求的某些方法时,可以采用模板方法模式,便于其他客户程序按照这些方法操作子类。

优点
1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

  • 提高代码复用性,将相同部分的代码放在抽象的父类中 ,而将不同的代码放入不同的子类中
  • 提高了扩展性,将不同的代码放入不同的子类中,通过对子类的扩展增加新的行为
  • 实现了反向控制,通过一个父类调用其子类的操作,通过对子类的扩展增加新的行为,实现了反向控制,符合“开闭原则”

缺点
每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

参考书籍:
王翔著 《设计模式——基于C#的工程化实现及扩展》

(0)

相关推荐

  • 设计模式-行为型-模板模式

    模板模式(Template): 提到模板,可能大多数人想到的是"简历模板"."论文模板"等,比如我们要写简历时,会从网上下载一份漂亮的简历模板,其格式是固定的, ...

  • 无废话设计模式(12)行为型模式--模板方法模式

    0-前言 模板方法模式定义:定义一个操作中的算法骨架,而将一些步骤延迟到子类中: 模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些步骤: 1-实现 1-1.简单UML图:  1-2 ...

  • PHP设计模式之装饰器模式

    PHP设计模式之装饰器模式 工厂模式告一段落,我们来研究其他一些模式.不知道各位大佬有没有尝试过女装?据说女装大佬程序员很多哟.其实,今天的装饰器模式就和化妆这件事很像.相信如果有程序媛MM在的话,马 ...

  • JAVA架构师之路十四:设计模式之模板模式

    JAVA架构师之路十三:设计模式之委派模式 模板模式 1. 模板模式 2. 模板模式案例 3. JDBC模板模式 没有意志,理想便是幻想. 1. 模板模式 定义 通常又叫模板模式,是指定义一个算法的骨 ...

  • 设计模式之模板方法

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

  • 技术图文:03 结构型设计模式(上)

    结构型设计模式(上) 本教程主要介绍一系列用于如何将现有类或对象组合在一起形成更加强大结构的经验总结. 知识结构: 图1 知识结构 享元模式 -- 实现对象的复用 Sunny 软件公司欲开发一个围棋软 ...

  • PHP设计模式之模板方法模式

    PHP设计模式之模板方法模式 模板方法模式,也是我们经常会在不经意间有会用到的模式之一.这个模式是对继承的最好诠释.当子类中有重复的动作时,将他们提取出来,放在父类中进行统一的处理,这就是模板方法模式 ...

  • [PHP小课堂]PHP设计模式之模板方法模式

    [PHP小课堂]PHP设计模式之模板方法模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 设计模式之模板方法模式实战解析

    本文微信公众号「AndroidTraveler」首发. 背景 最近在看<设计模式之禅>,为了能够更加深入的理解设计模式,达到学以致用. 这边记录一下自己的一些感受和看法,并结合具体代码实战 ...

  • 设计模式之模板方法模式(二)

    上一篇我们已经学会了模板方法模式,这次我们继续来深入学习下.毕竟学会只是第一步,还有更进一步的学习和深入等着我们呢. 我们先来看下,对模板方法模式的一个总结的类图: 让我们细看抽象类是如何被定义的,包 ...

  • Java设计模式【命令模式】

    命令模式 命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行.这个过程好在,三者相互解耦,任何一方都不 ...

  • 【4/25】在页面对象中启用模板方法模式(Template Method Pattern)

    这是<小游戏从0到1设计模式重构>系列内容第4篇,所有源码及资料在"程序员LIYI"公号回复"小游戏从0到1"获取. 上一小节我们应用了组合模式,对 ...

  • 设计模式-装饰器模式

    装饰器模式 定义 装饰器模式也叫包装模式 在不改变原有对象的基础上,把功能附加到对象上,提供了比继承更有弹性的替代方案 能够扩展原有对象的功能 属于结构型模式 生活中的例子 买煎饼 我们煎饼可以加鸡蛋 ...

  • PHP设计模式之迭代器模式

    PHP设计模式之迭代器模式 一说到这个模式,就不得不提循环语句.在<大话设计模式>中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得.任何语 ...