Template Method Pattern
模板方法模式组成对象:
- AbstractClass:定义并实现模板方法,声明模板方法中使用到的特定步骤,需要延迟到子类实现的,则为抽象方法。(模板方法是不可变的,可为密封)
- ConcreteClass:实现抽象方法,这样就将相应的实现延迟到了子类
模板方法模式类图:
模板方法实例:
业务场景,有一个旅游项目,一定会包含吃特色美食以及看特色景点,因为会有很多地方,各个地方都有差异。这里吃和看两个行为都是固定的,但是具体吃什么和看什么都是不固定,所以这里用模板方法模式
类图:
实例代码
1 /// <summary> 2 /// 旅游项目 3 /// </summary> 4 abstract class Tourism 5 { 6 public void Travel() 7 { 8 Console.WriteLine("景点:" + GetScenerySpot()); 9 Console.WriteLine("美食:" + GetFood()); 10 } 11 12 protected abstract string GetScenerySpot(); 13 protected abstract string GetFood(); 14 } 15 16 17 class ShangHaiTourism : Tourism 18 { 19 protected override string GetScenerySpot() 20 { 21 return "东方明珠"; 22 } 23 24 protected override string GetFood() 25 { 26 return "本帮菜"; 27 } 28 } 29 30 31 class JiangxiTourism : Tourism 32 { 33 protected override string GetScenerySpot() 34 { 35 return "庐山"; 36 } 37 38 protected override string GetFood() 39 { 40 return "赣菜"; 41 } 42 }
1 static void Main(string[] args) 2 { 3 Tourism tourism = new JiangxiTourism(); 4 tourism.Travel(); 5 tourism = new ShangHaiTourism(); 6 tourism.Travel(); 7 8 Console.ReadLine(); 9 } 10 }
模板方法模式就是一个比较简单的多态的应用。