zoukankan      html  css  js  c++  java
  • 设计模式之模板方法模式

    1、模板方法意图及UML图
     
        /// <summary>
        /// 一个简单的跟踪功能,此处为抽象类
        /// </summary>
        public abstract class BaseTrace
        {
            /// <summary>
            /// TemplateMethod
            /// </summary>
            public void Trace()
            {
                try
                {
                    Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:执行 开始");
    
                    Method();
    
                    Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:执行完成");
                }
                catch (Exception e)
                {
                    Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:执行异常");
                }
            }
    
            /// <summary>
            /// 需要强制子类重写的抽象方法
            /// </summary>
            public abstract void Method();
        }
        /// <summary>
        /// 此处为子类,用于实现之前的抽象类
        /// </summary>
        public class UserInfoTrace : BaseTrace
        {
            public override void Method()
            {
                Console.WriteLine("进入到了用户信息跟踪领域");
            }
        }
       class Program
        {
            static void Main(string[] args)
            {
                //调用
                  BaseTrace baseTrace = new UserInfoTrace();
    
                baseTrace.Trace();
    
                Console.ReadLine();
            }
        }

    模板方法的某些场景,可以使用委托来实现。我们来看看上述案例的委托方式实现。

    {
            static void Main(string[] args)
            {
                //调用
                BaseTrace(() =>
                {
                    Console.WriteLine("进入到了用户信息跟踪领域");
                });
    
                Console.ReadLine();
            }
    
            public static void BaseTrace(Action action)
            {
                try
                {
                    Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:执行 开始");
    
                    action();
    
                    Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:执行完成");
                }
                catch (Exception e)
                {
                    Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:执行异常");
                }
            }
        }

    依然可以实现模板方法的效果。

    展示这个案例,只是为了告诉大家,最终的实现可以是有多种,不一定非要用设计模式,但是学好设计模式确实很重要,它可以很好的帮助自己去理解设计模式,培养良好的思维习惯
  • 相关阅读:
    一些零碎小知识点积累随笔
    STM32学习笔记——新建工程模板步骤(向原子哥学习)
    记一次电信反射xss的挖掘与利用
    mysql字符串操作相关函数用法总结
    mysql学习笔记
    sigmoid function的直观解释
    多变量线性回归时使用梯度下降(Gradient Descent)求最小值的注意事项
    SAE中Python无法创建多线程的解决方案
    BCNF/3NF 数据库设计范式简介
    web.py下获取get参数
  • 原文地址:https://www.cnblogs.com/edison0621/p/10487675.html
Copyright © 2011-2022 走看看