2009年10月3日星期六

Template Method模板方法设计模式

生产或者制作什么东西,有时候需要严格的手续和步骤,比如做一般的中国菜,需要放油,放佐料,放主料,加热,出锅。只要制作一个做菜的模板(接口),具体不管做什么菜,只要按照这个模板做(继承接口),就能做出标准的中国菜。没有这个模板,就很难保证做什么菜都能按照这个步骤并且一步不少。


abstract class TemplateCooking
{
public virtual void AddOil() //虚拟函数,如果想放花生油以外的油,可以改写。否则可以不写。
{ Console.Write("放入花生油\n"); }
public abstract void AddCondiments(); //放佐料,抽象函数,必须重写。
public abstract void AddBase(); //放入主料,抽象函数,必须重写。
public virtual void HeatUp() //加热,虚拟函数,如果用其他方式加热可以改写。
{ Console.Write("用煤气灶加热\n"); }
public virtual void OutPut() ////出锅,如果不是放到盘子里,可以改写。
{ Console.Write("盛到盘子中\n"); }
public void Cook() //保证正确的顺序。
{
AddOil(); AddCondiments(); AddBase(); HeatUp(); OutPut();
}
}

//下面制作一个炒青椒肉丝的类。

class CookPepper: TemplateCooking
{
public override void AddOil() { Console.Write("放色拉油\n"); } //改用色拉油。
public override void AddCondiments() { Console.Write("放入花椒\n"); } //这个是必须实现的接口
public override void AddBase() { Console.Write("放入肉丝,青椒\n"); } //这个是必须实现的接口
//其他的加热,出锅 不改变。
}
public static void Main()
{
CookPepper cookPepper = new CookPepper();
cookPepper.Cook(); //保证按部就班准确的做好菜。
}

执行结果:
放色拉油
放入花椒
放入肉丝,青椒
用煤气灶加热
盛到盘子中

所以任何继承自TemplateCooking的类,肯定都能准确的做出中国菜来,不会少步骤也不会乱了顺序,这就是模板设计模式的好处。

没有评论:

发表评论