标签:
在抽象中定义算法骨架,讲一些可变的步骤延迟到子类去实现。
小明同学的表弟,今天给小明同学打电话。说自己失恋了。小明同学请他表弟吃饭,顺道安慰一下。
吃饭的过程中,小明同学就跟他表弟说:两个人从相识到相爱。无非就这么点事。只不过有些人有好感,有些人没有好感。
从相识到相爱,事情很相同。只不过有些地方不一样。这种情况,我们可以把相同的地方,定义成模板。然后讲不一样的地方,推迟到子类去实现。
我们用模板方法,构造以上剧情。
我们创建了从相识到相爱的模板。其中我们把好感度设置为抽象。如果没有好感度,剩下的都无效。
接着我们定义这些模板的执行顺序,我们写在Go这个方法里面。
public abstract class FallInLove { public void Single() { Console.WriteLine("两个人都是单身"); } public abstract bool GoodWill(); public void Know() { Console.WriteLine("两个人相识"); } public void Love() { Console.WriteLine("两个人恋爱"); } public void Go() { Console.WriteLine("两个人从相识到相爱的过程"); this.Single(); if (this.GoodWill()) { this.Know(); this.Love(); } } }
模板已经有了,我们接下来创建可变性的方法。并让可变方法继承抽象类。
public class Winer : FallInLove { public override bool GoodWill() { Console.WriteLine("互相有好感"); return true; } } public class Loser : FallInLove { public override bool GoodWill() { Console.WriteLine("没有好感"); Console.WriteLine("感情破裂"); return false; } }
接下来的事情就简单了,我们实例化一个Win,一个Loser。并且各自调用。
static void Main(string[] args) { Console.Write("成功"); FallInLove fall = new Winer(); fall.Go(); Console.WriteLine("-------------------------------"); Console.Write("失败"); fall = new Loser(); fall.Go(); Console.ReadLine(); }
模板方法就是在一个抽象类中,定义算法骨架,将可变的步骤延迟到子类去实现。
常见场景:有可能提取公共算法骨架
选择关键点:算法骨架是否牢固
标签:
原文地址:http://www.cnblogs.com/chenxygx/p/4998085.html