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

    定义

    定义实现业务的架构于基类中,制定业务模板,将具体的实现步骤延迟到基类中去,根据具体类实现不同的架构方法。

    举个简单的例子:例如上班:起床---交通工具---到公司工作。这就是一个业务模板,而其中变化的是:根据不同人的身份会选择不同的交通方式上班。

    类图

    代码

     1  public class Employee
     2     {
     3         /// <summary>
     4         ///上班
     5         /// </summary>
     6         public void Work()
     7         {
     8             GetUp();
     9 
    10         }
    11         /// <summary>
    12         /// 起床
    13         /// </summary>
    14         private void GetUp()
    15         {
    16             Console.WriteLine("Get up");
    17         }
    18         /// <summary>
    19         /// 工作
    20         /// </summary>
    21         private void DoWork()
    22         {
    23             Console.WriteLine("just do your job");
    24         }
    25         /// <summary>
    26         /// 上班交通方式
    27         /// </summary>
    28         protected virtual void GoToWork()
    29         {
    30             Console.WriteLine("by bus");
    31         }
    32     }
    33     public class Manager : Employee
    34     {
    35         protected override void GoToWork()
    36         {
    37             Console.WriteLine("drive car");
    38         }
    39     }
    40     public class Boss : Employee
    41     {
    42         protected override void GoToWork()
    43         {
    44             Console.WriteLine("on foot");
    45         }
    46     }
    47 
    48     public class TemplateClient
    49     {
    50         public void TestTemplate()
    51         {
    52             Employee emp = new Employee();
    53             emp.Work();
    54             Manager manager = new Manager();
    55             manager.Work();
    56             Boss boss = new Boss();
    57             boss.Work();
    58         }
    59     }

    总结

    关于模板方法模式,我们在封装变化是可以是使用虚方法、也可以使用抽象方法,抽象方法为抽象类是不可以实现的,而虚方法的类则可以,这要看具体的业务。这个模式我们也是经常用到的,将业务确定好,根据不同的业务需求重写对应的方法。到达封装变化,简化代码的效果。

    Top
    收藏
    关注
    评论
  • 相关阅读:
    Spring MyBatis多数据源分包
    ubuntu Ngin Install
    Ubuntu16.04开启root用户,并远程登录
    ubuntu16.04LTS更换阿里源
    修改DIV滚动条样式
    Spring-Boot配置文件数据源配置项
    Springboot 版本+ jdk 版本 + Maven 版本的对应关系
    CAS配置(3)之restful-api接入接口
    Java.Cas4.0客户端接入配置
    Java.HttpClient绕过Https证书解决方案二
  • 原文地址:https://www.cnblogs.com/Joy-et/p/4893423.html
Copyright © 2011-2022 走看看