Template Design Pattern

来源:互联网 发布:经纬度数据库 编辑:程序博客网 时间:2024/06/06 03:55

1.意图:定义一个算法的框架,把一些步骤延迟到子类中去实现;

2.适用:一次性实现一个算法的不变的部分,并且把可变的实现延迟到子类中去;子类的公共部分应该放在父类中去;

参与者:

1.抽象类AbstractClass:1)定义原语操作Primitive operation,需要子类去实现;2)定义模板方法,不仅调用原语操作,而且还调用其他AbstractClass的操作;

/// <summary>

  /// The 'AbstractClass' abstract class

  /// </summary>

  abstract class AbstractClass

  {

    public abstract void PrimitiveOperation1();

    public abstract void PrimitiveOperation2();

 

    // The "Template method"

    public void TemplateMethod()

    {

      PrimitiveOperation1();

      PrimitiveOperation2();

      Console.WriteLine("");

    }

  }


2.ConcreteClass:实现PremitiveOperation

/// <summary>

  /// A 'ConcreteClass' class

  /// </summary>

  class ConcreteClassA : AbstractClass

  {

    public override void PrimitiveOperation1()

    {

      Console.WriteLine("ConcreteClassA.PrimitiveOperation1()");

    }

    public override void PrimitiveOperation2()

    {

      Console.WriteLine("ConcreteClassA.PrimitiveOperation2()");

    }

  }

 

  /// <summary>

  /// A 'ConcreteClass' class

  /// </summary>

  class ConcreteClassB : AbstractClass

  {

    public override void PrimitiveOperation1()

    {

      Console.WriteLine("ConcreteClassB.PrimitiveOperation1()");

    }

    public override void PrimitiveOperation2()

    {

      Console.WriteLine("ConcreteClassB.PrimitiveOperation2()");

    }

  }


3.Client

AbstractClass aA = new ConcreteClassA();

      aA.TemplateMethod();

 

      AbstractClass aB = new ConcreteClassB();

      aB.TemplateMethod();