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

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

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

  • 相关阅读:
    【POJ 2406】Power Strings(KMP循环节)
    【HDU 3746】Simpsons’ Hidden Talents(KMP求循环节)
    【CodeForces 672B】Different is Good
    【UVALive 4642】Malfatti Circles(圆,二分)
    【POJ 1269】判断两直线相交
    【POJ 2503】Babelfish(字符串)
    ZOJ 2676 Network Wars[01分数规划]
    A1261. happiness(吴确)[二元组暴力最小割建模]
    poj3469 Dual Core CPU
    2154: Crash的数字表格
  • 原文地址:https://www.cnblogs.com/virus1102/p/GoF_templateMethod.html
Copyright © 2011-2022 走看看