磨刀不误砍柴工——模板方法模式 旧城等待, 2022-08-26 12:12 92阅读 0赞 ## 1.定义 ## 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可以重新定义该算法的某些特定步骤。 ## 2.理解 ## 提到模板,我们大家都很熟悉,说白了它就是一个骨架或者样式,只需要我们去填充内容就可以了。把这种思想散发到编程中,就是我们的模板方法模式。 ## 3.举例 ## 老师给学生出考试题,老师先要把考题写在黑板上然后学生抄下来才能答题,相信大家都这样考试过。很显然这种方式效率很低,本来考试一个小时内就可以完成,现在抄题就要花费半个小时,班里每个学生都花费半个小时抄题会造成多少时间的浪费啊!凡是有点良心的老师就会把试题提前整理成模板,每人打印一份,学生只需要在空白处写答案就可以了,这样既能提高效率又能保证大家的题目不会抄错,何乐而不为呢? //试卷模板 class TestPaper { public void TestQuestion1()//试题1 { Console.WriteLine("杨过得到,后来给了郭靖,练成倚天剑、屠龙刀的玄铁可能是[] a.球墨铸铁 b.马口铁 c.高速合金铁 d.碳素纤维"); Console.WriteLine("答案:" + Answer1());//虚方法 } public void TestQuestion2()//试题2 { Console.WriteLine("杨过、程英、陆无双铲除了情花,造成[] a.是这种植物不在害人 b.是一种珍稀物种灭绝 c.破坏了那个生物圈的生态平衡 d.造成了该地区沙漠化"); Console.WriteLine("答案:" + Answer2()); } public void TestQuestion3()//试题3 { Console.WriteLine("蓝凤凰致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,去给他们开什么药[] a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.让他们喝大量的生牛奶 e.以上全不对"); Console.WriteLine("答案:" + Answer3()); } protected virtual string Answer1()//试题1答题卡 { return ""; } protected virtual string Answer2()//试题2答题卡 { return ""; } protected virtual string Answer3()//试题3答题卡 { return ""; } } //学生甲的试卷 class TestPaperA:TestPaper { protected override string Answer1() { return "b";//考生答案 } protected override string Answer2() { return "c";//考生答案 } protected override string Answer3() { return "a";//考生答案 } } //学生乙的试卷 class TestPaperB : TestPaper { protected override string Answer1() { return "c";//考生答案 } protected override string Answer2() { return "a";//考生答案 } protected override string Answer3() { return "a";//考生答案 } } static void Main(string[] args) { Console.WriteLine("学生A抄的试卷:"); TestPaper studentA = new TestPaperA(); studentA.TestQuestion1();//考生A的试题1答案 studentA.TestQuestion2();//考生A的试题2答案 studentA.TestQuestion3();//考生A的试题3答案 Console.WriteLine("学生B抄的试卷:"); TestPaper studentB = new TestPaperB(); studentB.TestQuestion1();//考生B的试题1答案 studentB.TestQuestion2();//考生B的试题2答案 studentB.TestQuestion3();//考生B的试题3答案 Console.Read(); } ![SouthEast][] ## 4.特点 ## 模板方法模式是通过把不变的行为搬移到超类,去除子类中的重复代码来体现它的优势。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠,为我们提供了很好的代码复用平台。 [SouthEast]: /images/20220824/a254813f91e24e1ca7195d8bdb89879e.png
相关 被误解的C++——磨刀不误砍柴工 磨刀不误砍柴工 “磨刀不误砍柴工”这句老话用在C++身上是再合适不过了。如果把C++比喻成一把刀,那么它会是一把材质和形状都非常好的刀——只是没有开锋。所以我们要“磨刀”。 秒速五厘米/ 2022年09月20日 05:47/ 0 赞/ 148 阅读
相关 磨刀不误砍柴工——模板方法模式 1.定义 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可以重新定义该算法的某些特定步骤。 2.理解 提到 旧城等待,/ 2022年08月26日 12:12/ 0 赞/ 93 阅读
相关 模板方法模式 一、描述 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的 素颜马尾好姑娘i/ 2022年06月03日 01:08/ 0 赞/ 19 阅读
相关 模板方法模式 引入一个例子 ![在这里插入图片描述][70] 比如冲咖啡和冲茶两个过程,加工方法似乎都差不多。可以看成如下过程: 把水煮沸boil()->冲泡brew()->倒 约定不等于承诺〃/ 2022年05月06日 10:38/ 0 赞/ 71 阅读
相关 模板方法模式 最近看书又遇到模板方法模式,具体是在同步器(AQS)的内容上。就顺便再来回顾下。 同步器AbstractQueuedSynchronizer(AQS)是一个抽象类。其中定义了 墨蓝/ 2021年10月18日 11:34/ 0 赞/ 332 阅读
相关 模板方法模式 生活中有很多按步骤才能完成的事,比如我们想进房间,需要先将门打来,然后才能进去,进去之后再把门关上。开门和关门是固定的步骤,而进入房间的步骤则不是固定的,它可以有多种方式,走着 约定不等于承诺〃/ 2021年10月15日 06:45/ 0 赞/ 367 阅读
相关 模板方法模式 什么叫做模板方法模式? 在定义功能时,功能的一部分是确定的但是有一部分是不确定的,而确定的部分在使用不确定的部分。那么这时就将不确定的部分暴露出来,由该类的子类去实现。 清疚/ 2021年09月18日 15:40/ 0 赞/ 398 阅读
相关 模板方法模式 一 点睛 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些 深藏阁楼爱情的钟/ 2021年07月24日 20:53/ 0 赞/ 451 阅读
相关 模板方法模式 在定义功能时,功能的一部分是确定的,一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。 抽象类(AbstractCl... 系统管理员/ 2021年05月03日 16:24/ 0 赞/ 426 阅读
还没有评论,来说两句吧...