定义
模板方法是一种行为设计模式,它在父类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。
模板是对多种事物的结构、形式、行为的模式化总结,而模板方法模式(Template Method)则是对一系列类行为(方法)的模式化。我们将总结出来的行为规律固化在基类中,对具体的行为实现则进行抽象化并交给子类去完成,如此便实现了子类对基类模板的套用。
组成
模板类(父类)
定义最终调用方法和抽象方法,子类实现抽象方法
具体实现类(子类)
实现抽象方法
模式应用的现实场景
定制表格
设计者先将所有需要填写的信息头(字段名)抽取出来,再将它们整合在一起成为一种既定格式的表格,最后让填表人按照这个标准化模板去填写自己特有的信息,而不必为书写内容、先后顺序、格式而感到困扰。
代码示例
public abstract class TeldEmployeeGoHomeAbstract
{
/// <summary>
/// 下班
/// </summary>
public abstract void ComeOffWork();
/// <summary>
/// 通勤
/// </summary>
public abstract void Commute();
public void GoHome()
{
this.ComeOffWork();
this.Commute();
Console.WriteLine($"{this}=>我到家了");
}
}
public class DefaultEmployeeGoHomeImpl : TeldEmployeeGoHomeAbstract
{
public override void ComeOffWork()
{
Console.WriteLine("我不下班..");
}
public override void Commute()
{
Console.WriteLine("我坐班车..");
}
}
public class MaiweiEmployeeGoHomeImpl : TeldEmployeeGoHomeAbstract
{
public override void ComeOffWork()
{
Console.WriteLine("我5点下班");
}
public override void Commute()
{
Console.WriteLine("我座11号线=>1号线=>646公交");
}
}
public class TelaiDianEmployeeGoHomeImpl : TeldEmployeeGoHomeAbstract
{
public override void ComeOffWork()
{
Console.WriteLine("我6点下班");
}
public override void Commute()
{
Console.WriteLine("我座382公交直达");
}
}
调用和输出
class Program
{
static void Main(string[] args)
{
TeldEmployeeGoHomeAbstract defaultemployee = new DefaultEmployeeGoHomeImpl();
defaultemployee.GoHome();
TeldEmployeeGoHomeAbstract maiwei = new MaiweiEmployeeGoHomeImpl();
maiwei.GoHome();
TeldEmployeeGoHomeAbstract telaid = new TelaiDianEmployeeGoHomeImpl();
telaid.GoHome();
}
}