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
    收藏
    关注
    评论
  • 相关阅读:
    mssql分页原理及效率分析
    [ActiveX]使用VS2010创建MFC ActiveX工程项目
    Study notes for Discrete Probability Distribution
    oracle存储过程异常捕获
    (Python学习9)Python虚拟机中的一般表达式
    用Arduino做一个可视化网络威胁级别指示器!
    iOS上线项目源码分享
    android实习程序6——拨号通话
    评价等级使用的五星选择,包含半星的选择
    AJAX实现无刷新验证用户名
  • 原文地址:https://www.cnblogs.com/Joy-et/p/4893423.html
Copyright © 2011-2022 走看看