• 设计模式之模板方法模式


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

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

    展示这个案例,只是为了告诉大家,最终的实现可以是有多种,不一定非要用设计模式,但是学好设计模式确实很重要,它可以很好的帮助自己去理解设计模式,培养良好的思维习惯
  • 相关阅读:
    IE6/IE7浏览器中"float: right"自动换行的解决方法
    IE6/IE7浏览器不支持display: inline-block;的解决方法
    如何解决两个li之间的缝隙
    input、button、a标签 等定义的按钮尺寸的兼容性问题
    在一个页面重复使用一个js函数的方法
    关于让input=text,checkbox居中的解决方法
    遮盖层实现(jQuery+css+html)
    button,input type=button按钮在IE和w3c,firefox浏览器区别
    前端-选项卡(菜单栏)
    形成人、机器、过程和数据的互联互通
  • 原文地址:https://www.cnblogs.com/edison0621/p/10487675.html
Copyright © 2020-2023  润新知