14.模板方法模式
class Client
{
static void Main(string[] args)
{
Spinach spinach = new Spinach();
spinach.CookVegetabel();
Console.Read();
}
}
public abstract class Vegetabel
{
// 模板方法,不要把模版方法定义为Virtual或abstract方法,避免被子类重写,防止更改流程的执行顺序
public void CookVegetabel()
{
Console.WriteLine("抄蔬菜的一般做法");
pourOil();
HeatOil();
pourVegetable();
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("倒大白菜进锅中");
}
}