博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
行为型设计模式之模板方法(Template Method)
阅读量:7120 次
发布时间:2019-06-28

本文共 2152 字,大约阅读时间需要 7 分钟。

结构
意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。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 ”操作(参见效果一节),这样就只允许在这些点进行扩展。

 

1 using System; 2  3     class Algorithm  4     { 5         public void DoAlgorithm()  6         { 7             Console.WriteLine("In DoAlgorithm"); 8              9             // do some part of the algorithm here10             11             // step1 goes here12             Console.WriteLine("In Algorithm - DoAlgoStep1");            13             // . . . 14 15             // step 2 goes here16             Console.WriteLine("In Algorithm - DoAlgoStep2");            17             // . . . 18 19             // Now call configurable/replacable part20             DoAlgoStep3();21 22             // step 4 goes here23             Console.WriteLine("In Algorithm - DoAlgoStep4");            24             // . . . 25 26             // Now call next configurable part27             DoAlgoStep5();28         }29 30         virtual public void DoAlgoStep3()31         {32             Console.WriteLine("In Algorithm - DoAlgoStep3");        33         }34 35         virtual public void DoAlgoStep5()36         {37             Console.WriteLine("In Algorithm - DoAlgoStep5");            38         }39     }40 41     class CustomAlgorithm : Algorithm42     {43         public override void DoAlgoStep3()44         {45             Console.WriteLine("In CustomAlgorithm - DoAlgoStep3");46         }47 48         public override void DoAlgoStep5()49         {50             Console.WriteLine("In CustomAlgorithm - DoAlgoStep5");51         }52     }53 54     /// 55     ///    Summary description for Client.56     /// 57     public class Client58     {59         public static int Main(string[] args)60         {61             CustomAlgorithm c = new CustomAlgorithm();62 63             c.DoAlgorithm();64 65             return 0;66         }67     }
模板方法

 

转载于:https://www.cnblogs.com/ziranquliu/p/4666216.html

你可能感兴趣的文章
剑指Offer之在O(1)时间删除链表节点(题13)
查看>>
oracle goldengate实施简明介绍
查看>>
如何不让你的APP在模拟器中运行。
查看>>
wiki迁移方法操作步骤
查看>>
IIS应用程序池死报“数据字段包含错误号” 的解决办法
查看>>
js数字比较【牢记】
查看>>
可以用img做参数的成功例子
查看>>
部分添加epel源失败的可以试试直接把mirror站网址写到baseurl里
查看>>
CPU调优并发问题
查看>>
Linux 与Windows 7双系统默认引导顺序的修改
查看>>
自定义菜单查询接口
查看>>
自制本地yum源
查看>>
通过curl访问openstack各服务
查看>>
php_screw
查看>>
Apache(httpd) 报错You don't have permission to access /on this server.
查看>>
今天没白过之《ls命令的颜色》
查看>>
记录一下CACTI所用信息
查看>>
ptyhon的列表与字典操作
查看>>
python考勤分析
查看>>
JavaScript中对象深复制
查看>>