zoukankan      html  css  js  c++  java
  • 模板方法模式

      

      当我们要完成在某一细节层次一致的一个过程或者一个步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理

      模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤

      结构图:

    实现代码(C#):

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 
     5 namespace 模板方法模式
     6 {
     7     class Program
     8     {
     9         static void Main(string[] args)
    10         {
    11             AbstractClass c;
    12 
    13             c = new ConcreteClassA();
    14             c.TemplateMethod();
    15 
    16             c = new ConcreteClassB();
    17             c.TemplateMethod();
    18 
    19             Console.Read();
    20 
    21         }
    22     }
    23 
    24     abstract class AbstractClass
    25     {
    26         public abstract void PrimitiveOperation1();
    27         public abstract void PrimitiveOperation2();
    28 
    29         public void TemplateMethod()
    30         {
    31             PrimitiveOperation1();
    32             PrimitiveOperation2();
    33             Console.WriteLine("");
    34         }
    35     }
    36 
    37     class ConcreteClassA : AbstractClass
    38     {
    39         public override void PrimitiveOperation1()
    40         {
    41             Console.WriteLine("具体类A方法1实现");
    42         }
    43         public override void PrimitiveOperation2()
    44         {
    45             Console.WriteLine("具体类A方法2实现");
    46         }
    47     }
    48 
    49     class ConcreteClassB : AbstractClass
    50     {
    51         public override void PrimitiveOperation1()
    52         {
    53             Console.WriteLine("具体类B方法1实现");
    54         }
    55         public override void PrimitiveOperation2()
    56         {
    57             Console.WriteLine("具体类B方法2实现");
    58         }
    59     }
    60 
    61 }
    View Code

    模板方法模式是通过把不变形为搬到超类,去除子类中的重复代码来体现他的优势。

    即,当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变形为的纠缠。

  • 相关阅读:
    UINavigationController详细(转)
    IOS控件大全及控件大小
    IOS的各种控件(转载,防止遗忘)
    算法导论学习-heapsort
    POJ1502: MPI Maelstrom
    POJ1163 The Triangle: 倒三角形问题
    算法导论学习-Dynamic Programming
    POJ2299: Ultra-QuickSort-合并排序解决逆序数问题
    POJ3750: 小孩报数问题+一道经典约瑟夫问题(猴子选大王)
    用头插法实现单链表整表创建
  • 原文地址:https://www.cnblogs.com/virus1102/p/GoF_templateMethod.html
Copyright © 2011-2022 走看看