结构
意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Te m p l a t e M e t h o d 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
适用性
  • 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
  • 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是O p d y k e 和J o h n s o n 所描述过的“重分解以一般化”的一个很好的例子[ O J 9 3 ]。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
  • 控制子类扩展。模板方法只在特定点调用“h o o k ”操作(参见效果一节),这样就只允许在这些点进行扩展。
 using System;

     class Algorithm
{
public void DoAlgorithm()
{
Console.WriteLine("In DoAlgorithm"); // do some part of the algorithm here // step1 goes here
Console.WriteLine("In Algorithm - DoAlgoStep1");
// . . . // step 2 goes here
Console.WriteLine("In Algorithm - DoAlgoStep2");
// . . . // Now call configurable/replacable part
DoAlgoStep3(); // step 4 goes here
Console.WriteLine("In Algorithm - DoAlgoStep4");
// . . . // Now call next configurable part
DoAlgoStep5();
} virtual public void DoAlgoStep3()
{
Console.WriteLine("In Algorithm - DoAlgoStep3");
} virtual public void DoAlgoStep5()
{
Console.WriteLine("In Algorithm - DoAlgoStep5");
}
} class CustomAlgorithm : Algorithm
{
public override void DoAlgoStep3()
{
Console.WriteLine("In CustomAlgorithm - DoAlgoStep3");
} public override void DoAlgoStep5()
{
Console.WriteLine("In CustomAlgorithm - DoAlgoStep5");
}
} /// <summary>
/// Summary description for Client.
/// </summary>
public class Client
{
public static int Main(string[] args)
{
CustomAlgorithm c = new CustomAlgorithm(); c.DoAlgorithm(); return ;
}
}

模板方法

最新文章

  1. [AlwaysOn Availability Groups]排查:AG超过RPO
  2. Spark分析笔记
  3. 10个出色的NoSQL数据库
  4. Unity3D的杂记
  5. GUI_DOWNLOAD参数说明
  6. Eclipse查看历史代码
  7. FZU 2237 中位数 主席树 树上k大
  8. PL/SQL Developer 远程连接Oracle数据库
  9. [Session] SessionHelper2---C#关于Session高级操作帮助类 (转载)
  10. 【python学习笔记01】python的数据类型
  11. English - when用法
  12. iOS开发之理解iOS中的MVC设计模式
  13. web 前端routine
  14. 洛谷 P3871 [TJOI2010]中位数 解题报告
  15. jquery获取具有多个类class的标签内容
  16. IOS_多线程
  17. mac Intellij Idea Tmocat 启动报 Error running Tomcat: /conf/Catalina
  18. Linux下搭建Hadoop集群(Centos7.0)
  19. RFQ 、IFB、RFP 、RFI的区别是什么
  20. java设计模式-----16、解释器模式

热门文章

  1. manjaro无法使用ifconfig查ip
  2. 笔记-python操作mysql
  3. 4525: [Cerc2012]Kingdoms
  4. svn服务器的配置和使用
  5. linux下解压命令大全[转]
  6. 【转载】Unity插件研究院之自动保存场景
  7. python与execl的读写
  8. vue常用片段
  9. HDU 4262 Juggler 树状数组
  10. SPOJ 362 Ignore the Garbage 转7进制+简单大数除法