zoukankan      html  css  js  c++  java
  • 设计模式-模板方法模式详解

    一、概念

      模板方法模式属于行为类设计模式。

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

      简单来说,它就是抽象类(模板)和子类(具体的实现)组成,抽象类中定义了这个类需要完成的功能和逻辑,子类负责重写某些特定业务的方法。

      例如,在日常开发工作中,会有很多数据需要保存到数据库中。保存数据一般需要经过校验数据合法性、保存数据到数据库、返回数据到客户端这三个步骤。保存的数据不一样,它的校验规则也是不一样的。在这种情况下,我们就可以把这三个逻辑放在一个抽象类里,把校验数据这个方法写成虚方法,供不同的子类去重写。从而达到代码复用和不同的数据有不同的校验规则的效果。

    二、实现

    1. 定义一个抽象类
      public abstract class AbstractSave
         {
             public abstract void BeforeSave();
      
             public abstract void AfterSave();
      
             public void SaveData()
             {
                 Console.WriteLine("数据成功保存到数据库");
             }
      
             public void Save()
             {
                 this.BeforeSave();
                 this.SaveData();
                 this.AfterSave();
             }
         }
    2. 定义子类
       public class ConcreteSave : AbstractSave
          {
              public override void BeforeSave()
              {
                  Console.WriteLine("数据A保存前的校验");
              }
      
              public override void AfterSave()
              {
                  Console.WriteLine("数据A保存后的操作");
              }
          }
    3. 调用一下
       static void Main(string[] args)
              {
                  AbstractSave data1 = new ConcreteSave();
                  data1.Save();
      
                  Console.WriteLine();
      
                  AbstractSave data2 = new ConcreteSave();
                  data2.Save();
              }

    三、总结

      我觉得这个设计模式挺好懂的。一般用在什么场景呢?例如在实际工作中,一个需求来了,架构师或者高级工程师把业务逻辑理清楚,搭建好基本框架,然后分配具体的实现任务给其他工程师。这个时候,模板方法模式就能派上用场了,既能保证大方向不出错,又能把具体的实现任务分离出去,一举两得。

      上面的实现比较简单,在实际工作中,一般会结合泛型来使用,在抽象类中,把要保存的数据类型声明为泛型,返回的数据也声明为泛型。

      代码下载:https://github.com/hzhhhbb/TemplateMethodPattern

  • 相关阅读:
    决策树算法之ID3
    MSE与MAE的区别与选择
    (九)关键变量发掘技术
    (八)数据集切割
    (七)数据精简之(数据值精简和字段的精简)
    (六)数据精简之(数据记录精简)
    (五)数据编码是干什么
    (四)数据清洗主要工作
    pip-window安装
    CMDB学习之六 --客户端请求测试,服务端api优化
  • 原文地址:https://www.cnblogs.com/hzhhhbb/p/11489382.html
Copyright © 2011-2022 走看看