大话设计模式读书笔记(模板方法模式)pmingup9012

事件:小菜和大鸟探讨学习,回忆小时候抄黑板知识点时,容易把题目抄错,说着说着大鸟就引入了模板方法模式

模板方法模式:

1.不用设计模式直接设计(结合事件)

2.用模板方法模式去设计(结合事件)

3.看有什么地方继续改进(结合事件)

4.为模板方式模式做小结

大鸟让小菜设计:一个粗心的学生和一个细心的学生去抄同一份试卷

学生a抄好的试卷:

@Slf4jpublicclassTestPaperA{/***试题1*/publicvoidtestQuestion1(){log.info("哥尔·D·罗杰开启了大航海时代,最后的秘宝叫[],a.超级宝藏b.OnePiecec.永恒黄金d.荣耀之石");log.info("答案:b");}/***试题2*/publicvoidtestQuestion2(){log.info("下面哪一个不是真的D:[],a.蒙奇·D·路飞b.波特卡斯·D·罗杰c.马歇尔·D·蒂奇d.特拉法尔加·D·瓦铁尔·罗");log.info("答案:b");}/***试题3*/publicvoidtestQuestion3(){log.info("本博主磕哪一对cp:[],a.佐罗和香吉士b.香吉士和娜美c.佐罗和罗宾d.乔巴和佐罗");log.info("答案:c");}}学生b抄好的试卷

@Slf4jpublicclassTestPaperB{/***试题1*/publicvoidtestQuestion1(){log.info("哥尔·D·罗杰开启了大航海时代,最后的秘宝叫[],a.永恒钻石b.哇塞c.永恒黄金d.大秘宝");log.info("答案:d");}/***试题2*/publicvoidtestQuestion2(){log.info("下面哪一个不是真的D:[],a.蒙奇·D·罗杰b.波特卡斯·D·艾斯c.马歇尔·D·蒂奇d.特拉法尔加·D·瓦铁尔·罗");log.info("答案:a");}/***试题3*/publicvoidtestQuestion3(){log.info("本博主磕哪一对cp:[],a.佐罗和香吉士b.路飞和娜美c.佐罗和罗宾d.乔巴和佐罗");log.info("答案:b");}}客户端代码:

@Slf4jpublicclassTestPaper{publicstaticvoidmain(String[]args){log.info("学生甲抄的试卷:");TestPaperAstudentA=newTestPaperA();studentA.testQuestion1();studentA.testQuestion2();studentA.testQuestion3();log.info("学生乙抄的试卷:");TestPaperBstudentB=newTestPaperB();studentB.testQuestion1();studentB.testQuestion2();studentB.testQuestion3();}}大鸟:你看现在抄出来的两份试卷大体一致,但有很多细节上的地方不一样,而且非常难以维护,为了防止有人抄错,可以抽象一个父类,让子类继承它,然后公共试题代码写到父类中即可

公共试题部分:

@Slf4jpublicclassTestPaper{/***试题1*/publicvoidtestQuestion1(){log.info("哥尔·D·罗杰开启了大航海时代,最后的秘宝叫[],a.超级宝藏b.OnePiecec.永恒黄金d.荣耀之石");}/***试题2*/publicvoidtestQuestion2(){log.info("下面哪一个不是真的D:[],a.蒙奇·D·路飞b.波特卡斯·D·罗杰c.马歇尔·D·蒂奇d.特拉法尔加·D·瓦铁尔·罗");}/***试题3*/publicvoidtestQuestion3(){log.info("本博主磕哪一对cp:[],a.佐罗和香吉士b.香吉士和娜美c.佐罗和罗宾d.乔巴和佐罗");}}学生a和学生b的答题:

@Slf4jpublicclassTestPaperAextendsTestPaper{/***试题1*/@OverridepublicvoidtestQuestion1(){super.testQuestion1();log.info("答案:b");}/***试题2*/@OverridepublicvoidtestQuestion2(){super.testQuestion2();log.info("答案:b");}/***试题3*/@OverridepublicvoidtestQuestion3(){super.testQuestion3();log.info("答案:b");}}@Slf4jpublicclassTestPaperBextendsTestPaper{/***试题1*/@OverridepublicvoidtestQuestion1(){super.testQuestion1();log.info("答案:b");}/***试题2*/@OverridepublicvoidtestQuestion2(){super.testQuestion2();log.info("答案:b");}/***试题3*/@OverridepublicvoidtestQuestion3(){super.testQuestion3();log.info("答案:c");}}大鸟:虽然这样只填写答案即可,但是这只是初步的泛华,其实除了选项abcd,其他的都是重复的。我们既然用了继承,并且肯定这个继承有意义,就应该要成为子类的模板,所有重复的代码都应该要上升到父类去,而不是让每个子类都去重复

小菜:那应该怎么做呢?

大鸟:这时就要用到模板方法模式了,当我们要完成在某一细节层次,一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理

试题卷(父类):

@Slf4jpublicabstractclassTestPaper{privateStringanswer;/***试题1*/publicvoidtestQuestion1(){log.info("哥尔·D·罗杰开启了大航海时代,最后的秘宝叫[],a.超级宝藏b.OnePiecec.永恒黄金d.荣耀之石");log.info("答案为:{}",answer1());}publicabstractStringanswer1();/***试题2*/publicvoidtestQuestion2(){log.info("下面哪一个不是真的D:[],a.蒙奇·D·路飞b.波特卡斯·D·罗杰c.马歇尔·D·蒂奇d.特拉法尔加·D·瓦铁尔·罗");log.info("答案为:{}",answer2());}publicabstractStringanswer2();/***试题3*/publicvoidtestQuestion3(){log.info("本博主磕哪一对cp:[],a.佐罗和香吉士b.香吉士和娜美c.佐罗和罗宾d.乔巴和佐罗");log.info("答案为:{}",answer3());}publicabstractStringanswer3();}学生a,b自己答题:

@Slf4jpublicclassTestPaperAextendsTestPaper{/***试题1*/@OverridepublicStringanswer1(){return"b";}/***试题2*/@OverridepublicStringanswer2(){return"b";}/***试题3*/@OverridepublicStringanswer3(){return"c";}}@Slf4jpublicclassTestPaperBextendsTestPaper{/***试题1*/@OverridepublicStringanswer1(){return"b";}/***试题2*/@OverridepublicStringanswer2(){return"b";}/***试题3*/@OverridepublicStringanswer3(){return"d";}}客户端:

@Slf4jpublicclassTestPaperLog{publicstaticvoidmain(String[]args){log.info("学生甲抄的试卷:");//这里将子类改为了父类TestPaper,这里就可以用多态性实现代码的复用了TestPaperstudentA=newTestPaperA();studentA.testQuestion1();studentA.testQuestion2();studentA.testQuestion3();log.info("学生乙抄的试卷:");TestPaperstudentB=newTestPaperB();studentB.testQuestion1();studentB.testQuestion2();studentB.testQuestion3();}}

1.概念:它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法模式可以使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤

THE END
1.大话西游2手机助手下载新大话2助手下载v1.42安卓版新大话2助手是一款为大话西游玩家打造的手机助手,在这里有着多种功能可以查看,最权威数据最及时推送、科举乡试,握于指尖、随时随地与玩家交流等功能都非常强大,是玩家不可错过的助手工具。 官方介绍 《新大话2助手》是网易推出的《新大话西游2》官方助手APP。这是迄今为止最权威的新大话2辅助工具,无论是科举答题,游http://m.downcc.com/soft/119720.html
2.大话西游手游科举省试答题器科举乡试省试答案汇总还在为大话西游手游每周五的科举答题而烦恼了么?4399大话西游手游科举答题器上线了,为大家整理大话西游手游科举乡试省试答案汇总,此大话西游手游答题器支持关键词查询,大家只需要输入简单的词就能找到正确的答案,帮助大家轻松拿经验和游戏币奖励。 省试考试资格:科举乡试共20道题目,所有在8分钟内完成答题的玩家,可以获得https://news.4399.com/gonglue/dhxy/xinde/m/535057.html
3.一位后端妹纸的面试总结(美团+阿里+携程+58+贝贝+招银+华为+《大话设计模式》《mysql必知必会》《程序员面试金典》《java并发编程实战》《计算机操作系统第三版》《计算机网络》都看了一遍,《深入理解java虚拟机》看了两遍。《java编程思想》《Java数据结构和算法中文第二版》《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》《Struts2 in action中文版》《tcp详解卷一https://blog.51cto.com/u_11702014/6457154
4.软考之下午题答题技巧软考网工下午题技巧1.4 简答题 2.做此题的技巧 第一遍读题的时候,画出各实体,尽量找出实体间的对应关系。对于给表格的题,表格的标题及表格周围的文字都要认真看,比如时间有可能就是某一实体的属性。 解决1.1的技巧及注意事项:注意审题,不要漏泄联系类型(1:1,1:m,m:n),难点在于一个联系联系三个实体的。读题的时候注意这样的https://blog.csdn.net/aerchi/article/details/53126406