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")}:执行异常");
                }
            }
        }

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

    展示这个案例,只是为了告诉大家,最终的实现可以是有多种,不一定非要用设计模式,但是学好设计模式确实很重要,它可以很好的帮助自己去理解设计模式,培养良好的思维习惯
  • 相关阅读:
    命令行语法格式及特殊字符
    自己实现strncasecmp
    [windows bat]如何启动一个新的cmd窗口并在其内执行命令
    关于怎么提取m3u8地址
    如何获取各大平台的播放地址(获得优酷的m3u8播放地址)为例
    Python爬取视频指南
    win10更改pip源
    python获取文件路径
    sublime 经验总结 主题有 less2css
    35 个必须有的Bootstrap工具和生成器
  • 原文地址:https://www.cnblogs.com/edison0621/p/10487675.html
Copyright © 2011-2022 走看看