模板方法模式是一种行为型模式,定义了一个操作中的算法框架,而将一些步骤延迟到子类中。使得子类可以改变一个算法结构即可重新定义核算该算法的某些特定步骤,可以理解为规范某件事情的做事逻辑。以炒菜为类,炒菜可以总结出一个通用模板,放盐,放油,放食材,出锅。
namespace Designmode.Template
{
/// <summary>
/// 炒菜类接口
/// </summary>
public abstract class Cooking
{
/// <summary>
/// 放盐
/// </summary>
public abstract void PutSalt();
/// <summary>
/// 放入食用油
/// </summary>
public abstract void PutAdibleOil();
/// <summary>
/// 放入食材
/// </summary>
public abstract void PutFoodMaterials();
/// <summary>
/// 炒菜
/// </summary>
public void Cook()
{
//TODO: 开始做饭
Console.WriteLine("###开始做饭###");
//TODO: step1,放盐
PutSalt();
//TODO: step2,放油
PutAdibleOil();
//TODO: step3,放入食材
PutFoodMaterials();
//TODO: 结束做饭
Console.WriteLine($"###结束做饭###");
}
}
}
namespace Designmode.Template
{
/// <summary>
/// 炒鸡蛋
/// </summary>
public class ScrambledEgg : Cooking
{
/// <summary>
/// 放入使用盐
/// </summary>
public override void PutAdibleOil()
{
Console.WriteLine($"加入6g鲁花牌食用油");
}
/// <summary>
/// 放入食材
/// </summary>
public override void PutFoodMaterials()
{
Console.WriteLine($"打两个草鸡蛋");
}
/// <summary>
/// 放入食用盐
/// </summary>
public override void PutSalt()
{
Console.WriteLine($"放入3g食用盐");
}
}
}
namespace Designmode.Template
{
/// <summary>
/// 清炒白菜
/// </summary>
public class StirFriedCabbage : Cooking
{
/// <summary>
/// 放入使用盐
/// </summary>
public override void PutAdibleOil()
{
Console.WriteLine($"加入3g鲁花牌食用油");
}
/// <summary>
/// 放入食材
/// </summary>
public override void PutFoodMaterials()
{
Console.WriteLine($"放入切好的白菜");
}
/// <summary>
/// 放入食用盐
/// </summary>
public override void PutSalt()
{
Console.WriteLine($"放入3g食用盐");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Designmode.Template;
namespace Designmode
{
class Program
{
static void Main(string[] args)
{
#region 模板方法模式
ScrambledEgg scrambledEgg = new ScrambledEgg();
scrambledEgg.Cook();
StirFriedCabbage stirFriedCabbage = new StirFriedCabbage();
stirFriedCabbage.Cook();
#endregion
}
}
}