模板方法-模式

模板方法模式-从回家过年说起

  马上就要过年了,大家都很期待,回家的方式有很多种,汽车,火车,船,飞机等,不管什么方式回家,回家过春节就三个过程:买票、回家和家里庆祝。

  比如坐火车回家就可以这些写:

public class HapplyPeopleByHuoChe
    {
        public void celebrateSpring()
        {
            Console.WriteLine("买票....");
            Console.WriteLine("坐火车....");
            Console.WriteLine("回家庆祝....");
        }
    }

 

  但是有的人需要坐火车,有的人需要坐汽车回家,那我们复制+粘贴修改下:

public class HapplyPeopleByQiChe
    {
        public void celebrateSpring()
        {
            Console.WriteLine("买票....");
            Console.WriteLine("坐汽车....");
            Console.WriteLine("回家庆祝....");
        }
    }

 

  这样我们就会发现问题,增加一种交通工具,我们就要复制+粘贴下,这样代码就会变得难以维护和开发,针对这种情况,作者提出了一种原则:DRY(Don'T Repeat Yourself,不要复复制你自己),至于这种原则的好与坏我就不阐述了,上面我们那种实现方式的问题其实就是代码重用,下面说下模板方法模式的运用。

使用继承

  防止代码重用,OOP的一大特性就是继承,既然都是买票、回家和在家庆祝,那我们可以把这三种方式抽象出来,代码如下:

public class Program
    {
        static void Main(string[] args)
        {
            ByHuoChe hc = new ByHuoChe();
            hc.BuyTicket();
            hc.Travel();
            hc.HomeHappy();
            Console.ReadLine();
        }
    }
    //模板类,定义成抽象类,因为里面有抽象方法,所以类必须为抽象类
    public abstract class Template
    {
        internal void BuyTicket()
        {
            Console.WriteLine("买票。。。");
        }
        //定义成抽象方法
        internal abstract void Travel();
        internal void HomeHappy()
        {
            Console.WriteLine("回家好高兴。。。");
        }
    }

    //继承模板类(Template),必须重写抽象类中的所有抽象方法
    public class ByHuoChe : Template
    {
        //重写抽象方法
        internal override void Travel()
        {
            Console.WriteLine("做火车回家");
        }
    }

浏览园子的时候看到设计模式的文章,比较容易懂,所以记录下来,

原帖:http://www.cnblogs.com/xishuai/p/3497418.html

posted on 2014-06-08 20:19  忙碌ing  阅读(132)  评论(0)    收藏  举报

导航