模板方法-模式
模板方法模式-从回家过年说起
马上就要过年了,大家都很期待,回家的方式有很多种,汽车,火车,船,飞机等,不管什么方式回家,回家过春节就三个过程:买票、回家和家里庆祝。
比如坐火车回家就可以这些写:
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("做火车回家"); } }
浏览园子的时候看到设计模式的文章,比较容易懂,所以记录下来,
浙公网安备 33010602011771号