设计模式之模板方法模式

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     }
调用代码

 模板方法模式就是一个比较简单的多态的应用。

posted @ 2016-02-23 15:22  蘑菇mr  阅读(196)  评论(0编辑  收藏  举报