C#设计模式之Template Method

添加人:iyond七级(4377分)   添加时间:2007-05-18    阅读次数:1597  收藏此教程
名称:Template Method
结构:
 
意图:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
 
适用性 :
  1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
  2. 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是O p d y k e 和J o h n s o n 所描述过的“重分解以一般化”的一个很好的例子[ O J 9 3 ]。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。 
  3. 控制子类扩展。模板方法只在特定点调用“HOOK ”操作,这样就只允许在这些点进行扩展。 
示例代码
// Template Method
namespace TemplateMethod_DesignPattern
{
    using System;

    class Algorithm
    {
        public void DoAlgorithm()
        {
            Console.WriteLine("In DoAlgorithm");
            
            // do some part of the algorithm here
            
            // step1 goes here
            Console.WriteLine("In Algorithm - DoAlgoStep1");
            // . . .

            // step 2 goes here
            Console.WriteLine("In Algorithm - DoAlgoStep2");
            // . . .

            // Now call configurable/replacable part
            DoAlgoStep3();

            // step 4 goes here
            Console.WriteLine("In Algorithm - DoAlgoStep4");
            // . . .

            // Now call next configurable part
            DoAlgoStep5();
        }

        virtual public void DoAlgoStep3()
        {
            Console.WriteLine("In Algorithm - DoAlgoStep3");
        }

        virtual public void DoAlgoStep5()
        {
            Console.WriteLine("In Algorithm - DoAlgoStep5");
        }
    }

    class CustomAlgorithm : Algorithm
    {
        public override void DoAlgoStep3()
        {
            Console.WriteLine("In CustomAlgorithm - DoAlgoStep3");
        }

        public override void DoAlgoStep5()
        {
            Console.WriteLine("In CustomAlgorithm - DoAlgoStep5");
        }
    }

    /// <summary>
    /// Summary description for Client.
    /// </summary>
    public class Client
    {
        public static int Main(string[] args)
        {
            CustomAlgorithm c = new CustomAlgorithm();

            c.DoAlgorithm();

            return 0;
        }
    }
}
1页 第1上一页1下一页
相关的教程: CSharp 设计模式 Template Method
收藏此教程

当前平均分: 0.0(0 次打分)

-5-4-3-2-1012345
评论主题
您的大名
您的评论
验证码 点击换一个验证码
知识库搜索: