索引
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses.
Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm‘s structure.
AbstractClass
ConcreteClass
在以下情况下可以使用 Template Method 模式:
Template Method 可调用下列类型的操作:
Template Method 需要指明哪些是 Hook Operation,哪些是 Primitive Operation。例如使用命名约定等方式指明。
实现方式(一):Template Method 模式结构样式代码。
定义 Template Method 的一个重要的目的是尽量减少一个子类具体实现该算法时必须重定义的那些原语操作的数目。
需要重定义的操作越多,客户程序就越冗长。
1 namespace TemplateMethodPattern.Implementation1 2 { 3 public abstract class Algorithm 4 { 5 public void TemplateMethod() 6 { 7 Step1CanNotBeCustomized(); 8 Step2(); 9 Step3WithDefault(); 10 } 11 12 private void Step1CanNotBeCustomized() 13 { 14 Console.WriteLine("Step1"); 15 } 16 17 protected abstract void Step2(); 18 19 protected virtual void Step3WithDefault() 20 { 21 Console.WriteLine("Default Step3"); 22 } 23 } 24 25 public class ConcreteAlgorithmA : Algorithm 26 { 27 protected override void Step2() 28 { 29 Console.WriteLine("ConcreteAlgorithmA.Step2"); 30 } 31 } 32 33 public class ConcreteAlgorithmB : Algorithm 34 { 35 protected override void Step2() 36 { 37 Console.WriteLine("ConcreteAlgorithmB.Step2"); 38 } 39 40 protected override void Step3WithDefault() 41 { 42 Console.WriteLine("ConcreteAlgorithmB.Step3"); 43 } 44 } 45 46 public class Program 47 { 48 public void TestCase1() 49 { 50 var algorithm1 = new ConcreteAlgorithmA(); 51 algorithm1.TemplateMethod(); 52 53 var algorithm2 = new ConcreteAlgorithmB(); 54 algorithm2.TemplateMethod(); 55 } 56 } 57 }
《设计模式之美》为 Dennis Gao 发布于博客园的系列文章,任何未经作者本人同意的人为或爬虫转载均为耍流氓。
设计模式之美:Template Method(模板方法),布布扣,bubuko.com
原文:http://www.cnblogs.com/gaochundong/p/design_pattern_template_method.html