代码改变世界

模板方法Template

2012-08-09 13:53  Mike.Jiang  阅读(272)  评论(0编辑  收藏  举报

动机:

    在面向对象的世界里,代码复用主要体现在继承。然而当我们想让子类不仅能继承,而且也能重新定义方法时,很自然地就想到重写方法,但是这样是把整个方法的重写。如果我们有这样的一种需求,在父类的某个方法只能完成方法一个部分,而另一部分必须由子类去完成(这种应用在编写框架时遇到的很多),并且在调用这些由子类实现的方法有一定的逻辑。当有这样的需求时,我们应该怎么办——模板方法。

意图:

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

代码实现

View Code
    public class TemplateMethod
    {
        private bool falg = true;

        public bool Falg
        {
            get { return falg; }
            set { falg = value; }
        }

        public void Run() 
        {
            DoCommonMethod();
            if (falg)
            {
                ExtendMethod();
            }
        }
        private void DoCommonMethod()//方法的公共部分
        {
            Console.WriteLine("公共方法");
        }
        protected virtual void ExtendMethod() //方法的扩展部分
        {
            Console.WriteLine("默认扩展方法");
        }
    }

    public class ConcreteMethod : TemplateMethod
    {
        protected override void ExtendMethod()
        {
            Console.WriteLine("大华扩展方法");
        }
    }

    //客户代码
        static void Main(string[] args)
        {
            ConcreteMethod m = new ConcreteMethod();
            m.Run();
        }