设计模式——模板模式方法

时间:2022-07-27 21:59:31

 

在一个抽象类中定义一个操作中的算法骨架(对应于生活中的大家下载的模板),而将一些步骤延迟到子类中去实现(对应于我们根据自己的情况向模板填充内容)。模板方法使得子类可以不改变一个算法的结构前提下,重新定义算法的某些特定步骤,模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码。

 

 

抽象模板角色(Vegetable扮演这个角色):定义了一个或多个抽象操作,以便让子类实现,这些抽象操作称为基本操作。
具体模板角色(ChineseCabbage和Spinach扮演这个角色):实现父类所定义的一个或多个抽象方法。

 

员工上班遵循前往上班目的地,上班打卡,然后执行自己的工作,最后下班打卡的这样一个流程。

 

 1 /// <summary>  
 2     /// 抽象上班模板  
 3     /// </summary>  
 4     public abstract class working  
 5     {  
 6         // 模板方法,不要把模版方法定义为Virtual或abstract方法,避免被子类重写,防止更改流程的执行顺序  
 7         public void Init(string name)  
 8         {  
 9             this.gotocompany(name);  
10             this.clockin(name);  
11             this.workings(name);  
12             this.offduty(name);  
13         }  
14   
15         /// <summary>  
16         /// 去公司  
17         /// </summary>  
18         public abstract void gotocompany(string name);  
19   
20         /// <summary>  
21         /// 打卡  
22         /// </summary>  
23         private void clockin(string name)  
24         {  
25             Console.WriteLine("员工:" + name + "上班打卡");  
26         }  
27   
28         /// <summary>  
29         /// 开展自己的工作  
30         /// </summary>  
31         /// <param name="name"></param>  
32         public abstract void workings(string name);  
33   
34         /// <summary>  
35         /// 下班打卡  
36         /// </summary>  
37         /// <param name="name"></param>  
38         private void offduty(string name)  
39         {  
40             Console.WriteLine("员工:" + name + "下班班打卡");  
41         }  
42     }  

 

 

 

 1 /// <summary>  
 2    /// 员工A  
 3    /// </summary>  
 4    public class employeeA:working  
 5    {  
 6        public override void gotocompany(string name)  
 7        {  
 8            Console.WriteLine(name+"员工做地图前往公司");  
 9        }  
10   
11        public override void workings(string name)  
12        {  
13            Console.WriteLine(name+"员工开展程序编码工作");  
14        }  
15    }  

 

 

 1 /// <summary>  
 2 /// C#设计模式-模板方法模式  
 3 /// </summary>  
 4 class Program  
 5 {  
 6     static void Main(string[] args)  
 7     {  
 8         working w = new employeeA();  
 9         w.Init("A");  
10     }  
11 }  

 

 

学习于   https://blog.csdn.net/heyangyi_19940703/article/details/51313934