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

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

    展示这个案例,只是为了告诉大家,最终的实现可以是有多种,不一定非要用设计模式,但是学好设计模式确实很重要,它可以很好的帮助自己去理解设计模式,培养良好的思维习惯
  • 相关阅读:
    浅谈jQuery easyui datagrid操作单元格样式
    关于翻页之后表格重新加载,之前选中的项丢失的问题处理
    jquery操作复选框(checkbox)的12个小技巧总结
    项目管理学习笔记之四.风险管理
    c#基于udp实现的p2p语音聊天工具
    漫说好管理vs.坏管理
    linux安装tomcat
    wifi共享精灵2014.04.25.001已经更新,wifi热点中文名走起!
    NYOJ 589 糖果
    MacBook Pro安装Photoshop且支持Retina有你们说的那么困难吗!
  • 原文地址:https://www.cnblogs.com/edison0621/p/10487675.html
Copyright © 2011-2022 走看看