设计模式之模板方法

模板方法模式 Template Method

Intro

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

这里的“算法”,我们可以理解为广义上的“业务逻辑”,并不特指数据结构和算法中的“算法”。这里的算法骨架就是“模板”,包含算法骨架的方法就是“模板方法”,这也是模板方法模式名字的由来。

使用场景

模板方法模式是通过把不变行为搬移到基类中,去除子类中的重复代码来体现它的优势,提供了一个很好的代码复用平台。

当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,我们通过可以借助模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。

Sample

来看一个简单的示例:

internal abstract class AbstractClass{    protected abstract void PrimitiveOperation1();    protected abstract void PrimitiveOperation2();    public void TemplateMethod()    {        Console.WriteLine("-------Begin-------");        PrimitiveOperation1();        PrimitiveOperation2();        Console.WriteLine("-------End-------");    }}internal class ConcreteClassA : AbstractClass{    protected override void PrimitiveOperation1()    {        Console.WriteLine("具体类A 方法1 的实现");    }    protected override void PrimitiveOperation2()    {        Console.WriteLine("具体类A 方法2 的实现");    }}internal class ConcreteClassB : AbstractClass{    protected override void PrimitiveOperation1()    {        Console.WriteLine("具体类B 方法1 的实现");    }    protected override void PrimitiveOperation2()    {        Console.WriteLine("具体类B 方法2 的实现");    }}

More

模板模式有两大作用:复用和扩展。其中,复用指的是,所有的子类可以复用父类中提供的模板方法的代码。扩展指的是,框架通过模板模式提供功能扩展点,让框架用户可以在不修改框架源码的情况下,基于扩展点定制化框架的功能。

我一直觉得模板方法这个设计模式是最简单最实用最能体现面向对象特性的一个设计模式

面向对象的三大特性,封装、继承、多态在模板方法模式中都有体现

一些通用的逻辑通常会 封装 在父类中,不同的部分通常在父类中定义一个抽象方法或者虚方法(具体根据实际场景选择),然后在子类中 继承 父类以复用父类中的通用逻辑,在具体的子类中实现需要重写的逻辑,以此来实现 多态

模板方法模式在有些场景下可能需要一些变通,标准的模板方法模式需要继承,但是 C# 是单继承的语言,在没有办法继承的时候,通常我们可以借助委托来实现,不同的逻辑需要重写的逻辑抽象换成一个委托,通过委托来替换不同的实现逻辑

Reference

(0)

相关推荐

  • 大话设计-模板方法模式

    在基类定义算法的结构,具体实现延迟到子类. using System; namespace ConsoleApp2 { class Program { static void Main(string[ ...

  • 行为型模式之模板方法

    在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关. 例如,一个 ...

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

    模板方法模式 模板方法模式是面向对象系统中非常朴实的一种模式,体现出面向对象设计中继承和多态的基本特征.在开发应用的过程中,往往会在初期规划一些较粗粒度的算法,而且对参与计算的对象进行抽象,明确算法会 ...

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

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

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

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

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

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

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

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

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

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

  • 设计模式:超越软件与设计的模式语言

    最近看了一本书<架构启示录>,书中研究传统的建筑工作与数字产品的架构工作之间有着怎样的联系,重点探讨了Christopher Alexander.Richard Saul Wurman.C ...

  • 字节大牛总结的设计模式火了

    据说有小伙伴靠这份笔记顺利进入 BAT 哦,所以一定要好好学习这份资料! 资料介绍 这份资料非常全面且详细,覆盖了 设计模式 基础学习的方方面面,非常适合初学者入门! 资料也按目录进行编排,每一章下面 ...

  • 嵌入式C语言开发者必知:“设计模式”

    介绍如何使用设计模式为嵌入式系统创建高效且优化的C语言设计.针对嵌入式系统中从内存访问到事件调度,从状态机设计到安全性.可靠性保证,对系统设计以及性能表现的方方面面进行了详细阐述,也提出了很好的设计规 ...