抽象类最佳实践—模板设计模式
首先模板模式是设计模式的一种,简而言之,就是许多子类中的方法有非常多重复代码,也有子类特有代码,那么可以将特有代码定义为抽象方法,在子类实现,将重复代码提到父类的一个方法,结合抽象方法,提高代码复用性。
具体思路举例
p3~可以先来个计算任务,用10000.fori(从0开始,限制为10000的for循环,另外一个.forr模板正好反过来)
p4-p7~ 获取开始和结束时间,因为currentTimeMillis是返回long的静态方法,①可以用system.方法名直接调用 ②可以将我们写的方法中的数据类型统一改为long(老师建议)
执行时间不光不同电脑可能会有不同电脑,你自己的电脑上每次执行都可能不太一样,很神奇。好像不到1ms就会显示0ms
好像创建其他类对象应该需要在方法体中(又没写main方法就开始new对象了...)
p8~ 计算了main方法的执行时间,和真正编译运行的时间差太多了,可能时间主要花在编译上了
此时代码重复很多,复用性很差。
p9~ 重点来了。真正的引出。
1.老师先是将每个类中的方法提出来,然后在重复方法中,引入job方法。这个活其实是同类中如果非常多的job方法,有重复的代码有不重复的代码,有可能会排上用场,否则这样提取意义不大。
2.其次老师分析了A、B、C类都有重复代码和不重复代码,如果这样的类多起来,代码复用性会很差。
3.由此老师引出了template——模板(设计模式)
将重复代码提取到父类,将job方法抽象化,在子类实现。
debug追一下,可以看到calculateTime方法执行的是父类,而执行到calculateTime方法中的job()方法,因为this绑定的运行类型是调用calculateTime方法的对象,所以会执行对应子类的job方法。
这就解决了不同类之间代码复用性提高的问题。(即不同子类的方法有相同也有不同之处时,但没学抽象类,也可以在父类方法的方法体中啥都不写,就相当于抽象类的感觉...)
(p2)jdk8中文版老师也给了,就在资料里...
反思一下自我,心理能量这一块,好像只要你起来之后没有直接做任务,能量就降了一大截,后面就开始摆烂之旅,一错再错。
建立惩罚机制,让自己回归正轨。建立奖励机制,达到目标。
早上起来心理能量高,就做最难的事情——抠细节。
平时多鼓励自己,加油。