标签:style blog http strong io 2014
最近很喜欢吃面,今天一下课就又去吃面了。上次吃的排骨面,上上次吃的鸡排面,两个都好吃。其实吧,想想
这两唯一的区别就是加鸡排的就是鸡排面,加排骨就是排骨面。别的东西都一样。
吃饱回来,继续学习大话设计模式之模板方法模式。
abstract class Noodles //抽象面类 { public abstract void meat(); public abstract void soup();//抽象行为放到子类中去实现 public abstract void onion(); public abstract void coriander(); } class ChickenNoodles : Noodles//鸡排面 { public override void meat() { Console .WriteLine ( "加鸡排"); } public override void soup() { Console .WriteLine("有汤"); } public override void onion() { Console .WriteLine( "有葱"); } public override void coriander() { Console .WriteLine("有香菜"); } } class SpareribsNoodles : Noodles//排骨面 { public override void meat() { Console .WriteLine("加排骨"); } public override void soup() { Console.WriteLine("有汤"); } public override void onion() { Console.WriteLine("有葱"); } public override void coriander() { Console.WriteLine("有香菜"); } }
abstract class Noodles //抽象面类 { public abstract void meat();//抽象方法放到子类中去实现 public void soup() { Console.WriteLine("有汤"); } public void onion() { Console.WriteLine("有葱"); } public voidcoriander() { Console.WriteLine("有香菜"); } } class ChickenNoodles :Noodles//鸡排面 { public override voidmeat() { Console .WriteLine ("加鸡排"); } } class SpareribsNoodles :Noodles//排骨面 { public override voidmeat() { Console.WriteLine("加排骨"); } }
对比发现,修改之后的子类代码非常简单。相同操作的方法都在父类中去实现,子类中之存放不相同的方法。这里应该注意所有重复的代码都应该上升到父类中,而不是让每个子类都重复。
先看看整体结构图:
最后总结一下模板方法的特点:通过把不变的行为搬移到父类,去除子类中重复的代码来体现它的优势。
例子中的鸡排面和排骨面只因为加的肉不同而不同,所以子类中只有这个方法,别的方法都相同,所以都写到父类中。
将学习和生活结合起来,学习将更高效和搞笑O(∩_∩)O~
标签:style blog http strong io 2014
原文地址:http://blog.csdn.net/u010542940/article/details/24668191