提到模板,大家肯定不免想到生活中的“简历模板”、“论文模板”、“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简历模板,下载下来的简历模板的格式都是相同的,然而我们下载下来简历模板之后我们可以根据自己的情况填充不同的内容要完成属于自己的简历。在设计模式中,模板方法模式中模板和生活中模板概念非常类似,下面让我们就详细介绍模板方法的定义,大家可以根据生活中模板的概念来理解模板方法的定义。
模板方法介绍
模板方法模式的定义
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模仿方法使得子类可以不改变一个算法的结构既可重定义该算法的某些特定步骤
模仿方法模式的结构图
模式的组成
AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法,这个模板方法一般是一个具体的方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现,顶级逻辑也有可能调用一些具体的方法
ConcreteClass实现了父类所定义的一个或多个抽象放啊,每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以出这些抽象方法(也就是顶级逻辑的组成步骤)不同的实现,从而使得顶级逻辑的实现各不相同
看了模板方法的定义以及结构图,下面我们来看看在代码中如何使用
题目:要下课了老师在黑板出家庭作业,每个学生都要抄题目。
第一版无模式
/// <summary> /// 学生甲 /// </summary> public class MethodA { public void TestQuestion1() { Console.WriteLine("试题一【】 a.正确 b 错误 c 无解"); Console.WriteLine("答案:b"); } public void TestQuestion2() { Console.WriteLine("试题二【】 a.正确 b 错误 c 无解"); Console.WriteLine("答案:a"); } public void TestQuestion3() { Console.WriteLine("试题三【】 a.正确 b 错误 c 无解"); Console.WriteLine("答案:c"); } } /// <summary> /// 学生已 /// </summary> public class MethodB { public void TestQuestion1() { Console.WriteLine("试题一【】 a.正确 b 错误 c 无解"); Console.WriteLine("答案:b"); } public void TestQuestion2() { Console.WriteLine("试题二【】 a.正确 b 错误 c 无解"); Console.WriteLine("答案:a"); } public void TestQuestion3() { Console.WriteLine("试题三【】 a.正确 b 错误 c 无解"); Console.WriteLine("答案:c"); } } /// <summary> /// 客户端 /// </summary> class Program { static void Main(string[] args) { Console.WriteLine("学生甲的试题:"); MethodA a = new MethodA(); a.TestQuestion1(); a.TestQuestion2(); a.TestQuestion3(); Console.WriteLine("学生已的试题:"); MethodB B= new MethodB(); B.TestQuestion1(); B.TestQuestion2(); B.TestQuestion3(); } }