设计模式2-模板方法模式

 1 namespace DesignModel.模板方法模式
 2 {
 3 
 4     abstract class Introduce
 5     {
 6         /// <summary>
 7         /// 模板方法,给出逻辑的骨架,是一些抽象行为组成,实现推迟到子类。
 8         /// </summary>
 9         public void SayHello()
10         {
11             Name();
12             Department();
13             Age();
14         }
15         /// <summary>
16         /// 抽象行为1 放到子类去实现
17         /// </summary>
18         public abstract void Name();
19         /// <summary>
20         /// 抽象行为2
21         /// </summary>
22         public abstract void Department();
23         /// <summary>
24         /// 女员工可以选择隐藏自己的年龄,所以设定为虚方法吧
25         /// </summary>
26         internal protected virtual void Age()
27         {
28             Console.WriteLine("");
29         }
30     }
31 
32     /// <summary>
33     /// 子类提供顶级逻辑的具体不同实现
34     /// </summary>
35     class XliuIntroduce : Introduce
36     {
37         public override void Department()
38         {
39             Console.WriteLine("挨踢部");
40         }
41 
42         public override void Name()
43         {
44             Console.WriteLine("小牛");
45         }
46 
47         internal protected override void Age()
48         {
49             Console.WriteLine("26");
50         }
51     }
52     class RossIntroduce : Introduce
53     {
54         public override void Department()
55         {
56             Console.WriteLine("客户部");
57         }
58 
59         public override void Name()
60         {
61             Console.WriteLine("Ross");
62         }
63     }
64 }
65 static void 模板方法模式()
66         {
67             Introduce introduce = new XliuIntroduce();
68             introduce.SayHello();
69             introduce = new RossIntroduce();
70             introduce.SayHello();
71         }
View Code

模板方法模式:抽象类定义顶级抽象逻辑,一个业务的“模板”,通过多态,子类去实现自己的业务算法。把不变行为搬移到超类,去除子类中的重复代码。当不变的和可变的行为在子类实现中出现就需要考虑使用该模式。

原文地址:https://www.cnblogs.com/liurui/p/5501986.html