模板方法模式(TemplateMethod):定义一个操作中算法的骨架,将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
1、模板方法是通过把不变行为搬移到父类,去除子类中的重复代码来体现优势。
2、模板方法模式就是提供了一个很好的代码复用平台。
模板方法模式代码
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace TemplateMethod
6 {
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 AbstractClass c;
12 c = new ConcreteClassA();
13 c.MethodOne();
14 c.MethodTwo();
15 Console.WriteLine();
16 c = new ConcreteClassB();
17 c.MethodOne();
18 c.MethodTwo();
19 Console.ReadLine();
20 }
21 }
22 public abstract class AbstractClass
23 {
24 public abstract void MethodOne();
25 public abstract void MethodTwo();
26 //TemplateMethod
27 public void TemplateMethod()
28 {
29 MethodOne();
30 MethodTwo();
31 Console.WriteLine(" ");
32 }
33 }
34 public class ConcreteClassA : AbstractClass
35 {
36 public override void MethodOne()
37 {
38 Console.WriteLine("具体类A方法1实现");
39 }
40 public override void MethodTwo()
41 {
42 Console.WriteLine("具体类A方法2实现");
43 }
44 }
45 public class ConcreteClassB : AbstractClass
46 {
47 public override void MethodOne()
48 {
49 Console.WriteLine("具体类B方法1实现");
50 }
51 public override void MethodTwo()
52 {
53 Console.WriteLine("具体类B方法2实现");
54 }
55 }
56 }
57
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace TemplateMethod
6 {
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 AbstractClass c;
12 c = new ConcreteClassA();
13 c.MethodOne();
14 c.MethodTwo();
15 Console.WriteLine();
16 c = new ConcreteClassB();
17 c.MethodOne();
18 c.MethodTwo();
19 Console.ReadLine();
20 }
21 }
22 public abstract class AbstractClass
23 {
24 public abstract void MethodOne();
25 public abstract void MethodTwo();
26 //TemplateMethod
27 public void TemplateMethod()
28 {
29 MethodOne();
30 MethodTwo();
31 Console.WriteLine(" ");
32 }
33 }
34 public class ConcreteClassA : AbstractClass
35 {
36 public override void MethodOne()
37 {
38 Console.WriteLine("具体类A方法1实现");
39 }
40 public override void MethodTwo()
41 {
42 Console.WriteLine("具体类A方法2实现");
43 }
44 }
45 public class ConcreteClassB : AbstractClass
46 {
47 public override void MethodOne()
48 {
49 Console.WriteLine("具体类B方法1实现");
50 }
51 public override void MethodTwo()
52 {
53 Console.WriteLine("具体类B方法2实现");
54 }
55 }
56 }
57