zoukankan      html  css  js  c++  java
  • 模板模式

    定义

    在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

    UML类图

    实现

    案例:以前后端开发流程为例,
    得到需求 -> 打开工具编写代码 -> 测试

    抽象开发类

        public abstract class Development
        {
            public void SolveProblems()
            {
                GetProblems();
                WriteCode();
                Testing();
            }
    
            public void GetProblems()
            {
                Console.WriteLine("获得新的需求");
            }
    
            public abstract void WriteCode();
    
            public void Testing()
            {
                Console.WriteLine("进行测试");
            }
        }
    

    前端开发类

        public class Frontend : Development
        {
    
            public override void WriteCode()
            {
                Console.WriteLine("完成页面交互");
                Console.WriteLine("从后端接口获取数据");
                Console.WriteLine("数据绑定");
            }
        }
    

    后端开发类

        public class Backend : Development
        {
            public override void WriteCode()
            {
                Console.WriteLine("业务逻辑开发");
                Console.WriteLine("存储操作");
                Console.WriteLine("接口封装");
            }
        }
    

    抽象父类中的SolveProblems方法为模板方法,WriteCode定义为抽象方法,每个子类实现自己的算法。

    模板方法还提供了钩子函数,用于控制模板方法中的流程或者重写父类中的某些行为(例如对模板方法返回的结果重新排序)。

    比如

        public abstract class Development
        {
            public void SolveProblems()
            {
                GetProblems();
                WriteCode();
                Testing();
                if (IsGoodJob())
                {
                    TeamBuilding();
                }
            }
    
            public void GetProblems()
            {
                Console.WriteLine("获得新的需求");
            }
    
            public abstract void WriteCode();
    
            public void Testing()
            {
                Console.WriteLine("进行测试");
            }
    
            public virtual bool IsGoodJob()
            {
                return true;
            }
    
            public void TeamBuilding()
            {
                Console.WriteLine("下班团建");
            }
    
        }
    
        public class FrontEnd : Development
        {
    
            public override void WriteCode()
            {
                Console.WriteLine("完成页面交互");
                Console.WriteLine("从后端接口获取数据");
                Console.WriteLine("数据绑定");
            }
    
            public override bool IsGoodJob()
            {
                return false;
            }
        }
    
  • 相关阅读:
    使用keepalived监控tomcat 达到双机热备
    nginx tomcat负载均衡 使用redis session共享
    Java线程安全和非线程安全
    Log4J日志配置详解
    使用java mail的网易smtp协议 发送邮件
    JavaScript-DOM(3)
    JavaScript-DOM(2)
    JavaScript-DOM(1)
    BOM简介
    JavaScript(数组、Date、正则)
  • 原文地址:https://www.cnblogs.com/Saints/p/12630229.html
Copyright © 2011-2022 走看看