通俗易懂设计模式解析——模板方法模式

  • 2019 年 10 月 3 日
  • 笔记

前言

  我们学习了解完了创建型设计模式和结构型设计模式,今天我们开始学习并了解行为型设计模式。今天我们首先来看这么一个设计模式——模板方法模式。这个模式我们在平常开发中总会不自觉的使用到。就像我们平时一样的各种网站模板、建立模板、PPT模板等等。啥意思呢?简单,也就是把共同的东西拿出来,你需要具体去实现你自己的那么就另外加上自己的特有行为就是了。我们一起来看看详细的解释介绍吧。

模板方法模式介绍

一、来由

在我们平时的系统开发中,经常会遇到一些方法,出现大部分一样的代码。也就是常常有一些稳定的框架结构,但是其中的一些细小的操作却是在变化。我们现在如何在稳定框架结构的前提下去实现不同的细节呢?

二、意图

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

三、案例图

 

四、模板方法模式代码示例

看上面的案例图,看出模板方法模式由两个部分组成:

抽象类:定义了一个模板方法,其中包含执行的步骤。还有固定方法和抽象方法

具体类:实现抽象方法具体行为

我们来看看下面这个代码示例,帮助我们更进一步了解其实现。 就拿我们写文章来说,步骤都是打开编辑器——写文章——保存发布。不同的就是我们写的文章的主题内容不一样罢了。我们一起看起代码实现:

namespace Template_Method_Pattern  {      class TemplateMethodPattern      {      }      #region      /// <summary>      /// 抽象类型      /// </summary>      public abstract class WriteArticle      {          /// <summary>          /// 这个就是模板方法,定义了写文章的顺序。这里不能使用抽象和Virtual,防止其子类修改执行顺序。          /// </summary>          public void Article()          {              OpenEditor();              Write();              Release();              Console.WriteLine("文章完成了并发布了!");          }          /// <summary>          /// 打开编辑器          /// </summary>          public void OpenEditor()          {              Console.WriteLine("打开编辑器");          }          /// <summary>          /// 开始写文章,其子类具体实现文章内容          /// </summary>          public abstract void Write();          /// <summary>          /// 发布文章          /// </summary>          public void Release()          {              Console.WriteLine("发布文章");          }      }      #endregion      /// <summary>      /// 技术文章      /// </summary>      public class TchnologyArticle : WriteArticle      {          public override void Write()          {              Console.WriteLine("设计模式相关的文章");          }      }      /// <summary>      /// 生活文章      /// </summary>      public class LifeArticle : WriteArticle      {          public override void Write()          {              Console.WriteLine("生活文章");          }      }    }

 

    class Program      {          static void Main(string[] args)          {              //技术文章              WriteArticle writeTchnology = new TchnologyArticle();              writeTchnology.Article();                //生活文章              WriteArticle writeLife = new LifeArticle();              writeLife.Article();          }      }

 

使用场景及优缺点

一、使用场景

1、许多的子类都包含相同的方法,逻辑共通

2、重要复杂的方法可以考虑作为模板方法

二、优点

1、共用部分方法实现代码复用、编译维护

2、固定父类顺序,扩展子类实现。灵活变化、符合开闭原则

3、行为由父类控制、实现子类控制

三、缺点

1、没实现一个不同的需求就会增加一个子类,这样会导致类的个数增加,增加系统的大小

2、需要开发人员花费更多的时间去整理和清理其中的关系

总结

  到这里模板方法模式就介绍完了。总的来说就是模板方法模式定义了功能的实现步骤,然后抽象类对步骤进行控制,需要扩展的延迟到其子类进行扩展。从而子类可以复用父类的代码。当然这也还是基于继承来实现代码复用的一种方法。在我们开发的时候有一些系统定义的东西不符合我们的需求。他们在开发中也是固定好了一定的骨架,其中一些方法留了出来,方便我们开发人员自己重新定义。这么一个模板方法模式在我们日常开发中可能经常用到。有时候自己都不知觉的就使用到了。这也是一个较为简单且基础的模式。


平凡人生要用平凡的心去对待,你的人生将会更精彩。

    C#设计模式系列目录

欢迎大家扫描下方二维码,和我一起踏上设计模式的闯关之路吧!