您的位置:首页 > 其它

14.模板方法模式(Template Method)

2015-07-13 02:50 411 查看
using System;

namespace ConsoleApplication7
{
class Program
{
/// <summary>
/// 模板方法模式——在一个抽象类中定义一个操作中的算法骨架(对应于生活中的大家下载的模板),
/// 而将一些步骤延迟到子类中去实现(对应于我们根据自己的情况向模板填充内容)。
/// 模板方法使得子类可以不改变一个算法的结构前提下,重新定义算法的某些特定步骤,
/// 模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码。
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
// 创建一个菠菜实例并调用模板方法
Spinach spinach = new Spinach();
spinach.CookVegetabel();
Console.WriteLine("----------------------------------------------");
ChineseCabbage chinesecabbage = new ChineseCabbage();
chinesecabbage.CookVegetabel();
Console.Read();
}

/// <summary>
/// 蔬菜超类
/// </summary>
public abstract class Vegetabel
{
// 模板方法,不要把模版方法定义为Virtual或abstract方法,避免被子类重写,防止更改流程的执行顺序
public void CookVegetabel()
{
Console.WriteLine("抄蔬菜的一般做法");
this.pourOil();
this.HeatOil();
this.pourVegetable();
this.stir_fry();
}

// 第一步倒油
public void pourOil()
{
Console.WriteLine("倒油");
}

// 把油烧热
public void HeatOil()
{
Console.WriteLine("把油烧热");
}

// 油热了之后倒蔬菜下去,具体哪种蔬菜由子类决定
public abstract void pourVegetable();

// 开发翻炒蔬菜
public void stir_fry()
{
Console.WriteLine("翻炒");
}
}

// 菠菜
public class Spinach : Vegetabel
{
public override void pourVegetable()
{ Console.WriteLine("倒菠菜进锅中"); }
}

// 大白菜
public class ChineseCabbage : Vegetabel
{
public override void pourVegetable()
{
Console.WriteLine("倒大白菜进锅中");
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: