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

前言

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

模板方法模式介绍

1、来由

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

2、意图

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

3、案例图

 

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

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

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

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

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

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、优势

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

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

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

3、缺点

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

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

总结

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


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

    C#设计模式系列目录

欢迎你们扫描下方二维码,和我一块儿踏上设计模式的闯关之路吧!

  

相关文章
相关标签/搜索