• 行为型设计模式之模板方法(Template Method)


    结构
    意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。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 here
    10             
    11             // step1 goes here
    12             Console.WriteLine("In Algorithm - DoAlgoStep1");            
    13             // . . . 
    14 
    15             // step 2 goes here
    16             Console.WriteLine("In Algorithm - DoAlgoStep2");            
    17             // . . . 
    18 
    19             // Now call configurable/replacable part
    20             DoAlgoStep3();
    21 
    22             // step 4 goes here
    23             Console.WriteLine("In Algorithm - DoAlgoStep4");            
    24             // . . . 
    25 
    26             // Now call next configurable part
    27             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 : Algorithm
    42     {
    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     /// <summary>
    55     ///    Summary description for Client.
    56     /// </summary>
    57     public class Client
    58     {
    59         public static int Main(string[] args)
    60         {
    61             CustomAlgorithm c = new CustomAlgorithm();
    62 
    63             c.DoAlgorithm();
    64 
    65             return 0;
    66         }
    67     }
    模板方法
  • 相关阅读:
    Atitit.code base view 视图的实现原理
    Atitit.code base view 视图的实现原理
    Atitit。  工作流引擎的发展趋势
    Atitit. atiOrder   Order 订单管理框架的设计
    Atitit。  工作流引擎的发展趋势
    Atitit. atiOrder   Order 订单管理框架的设计
    atitit.编程语言 类与对象的 扩展机制.doc
    atitit.编程语言 类与对象的 扩展机制.doc
    Atitit.为什么小公司也要做高大上开源项目
    Atitit.为什么小公司也要做高大上开源项目
  • 原文地址:https://www.cnblogs.com/ziranquliu/p/4666216.html
Copyright © 2020-2023  润新知