模板方法模式比喻
80后的记忆中应该有这样一幕---老师随堂测试,将题目抄到黑板上要我们先抄题目然后再做答案。现在呢,直接发个试卷让我们直接把答案写在试卷上,现在测试的这种形式其实就是模板方法模式(TemplateMethod)!
模板方法模式意图
模板方法模式(TemplateMethod)定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式类图
模板方法模式实现
/// <summary>
/// 抽象模板,定义并实现一个具体模板方法,该方法给出一个顶级逻辑的骨架,
/// 逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。
/// </summary>
abstract class TestPaper
{
/// <summary>
/// 抽象行为,在子类中实现
/// </summary>
public abstract void Answer();
/// <summary>
/// 模板方法,给出逻辑的骨架
/// </summary>
public void TemplateMethod()
{
Console.WriteLine("你认为朱利IT博客怎么样?");
Answer();
}
}
/// <summary>
/// 我的试卷:实现父类定义的抽象方法
/// </summary>
class MyTestPaper : TestPaper
{
public override void Answer()
{
Console.WriteLine("好!");
}
}
/// <summary>
/// 你的试卷:给出不同的实现,使得顶级逻辑的实现各不相同
/// </summary>
class YourTestPaper : TestPaper
{
public override void Answer()
{
Console.WriteLine("挺好!");
}
}
/// <summary>
/// 模板方法模式客户端应用
/// </summary>
class Program
{
static void Main(string[] args)
{
//调查问卷
TestPaper paper;
//我的调查问卷
paper = new MyTestPaper();
paper.TemplateMethod();
//你的调查问卷
paper = new YourTestPaper();
paper.TemplateMethod();
Console.Read();
}
}
模板方法模式总结
模板方法模式准备一个抽象类,将通用逻辑用具体方法的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。也就是,先制定一个顶级逻辑而将逻辑的细节留给具体的子类去实现。
朱利IT博客原创博文:文章地址:http://www.zhuli8.com/sjms/TemplateMethod.html