打字猴:1.70045905e+09
1700459050 ––-H1型号悍马––—
1700459051
1700459052 H1型号的悍马是否需要喇叭声响?0-不需要1-需要
1700459053
1700459054 1
1700459055
1700459056 悍马H1发动……
1700459057
1700459058 悍马H1引擎声音是这样在……
1700459059
1700459060 悍马H1鸣笛……
1700459061
1700459062 悍马H1停车……
1700459063
1700459064 ––-H2型号悍马––—
1700459065
1700459066 悍马H2发动……
1700459067
1700459068 悍马H2引擎声音是这样在……
1700459069
1700459070 悍马H2停车……
1700459071
1700459072 看到没,H1型号的悍马是由客户自己控制是否要响喇叭,也就是说外界条件改变,影响到模板方法的执行。在我们的抽象类中isAlarm的返回值就是影响了模板方法的执行结果,该方法就叫做钩子方法(Hook Method)。有了钩子方法模板方法模式才算完美,大家可以想想,由子类的一个方法返回值决定公共部分的执行结果,是不是很有吸引力呀!
1700459073
1700459074 模板方法模式就是在模板方法中按照一定的规则和顺序调用基本方法,具体到前面那个例子,就是run()方法按照规定的顺序(先调用start(),然后再调用engineBoom(),再调用alarm(),最后调用stop())调用本类的其他方法,并且由isAlarm()方法的返回值确定run()中的执行顺序变更。
1700459075
1700459076
1700459077
1700459078
1700459079 设计模式之禅 [:1700453954]
1700459080 设计模式之禅 10.5 最佳实践
1700459081
1700459082 初级程序员在写程序的时候经常会问高手“父类怎么调用子类的方法”。这个问题很有普遍性,反正我是被问过好几回,那么父类是否可以调用子类的方法呢?我的回答是能,但强烈地、极度地不建议这么做,那该怎么做呢?
1700459083
1700459084 ❑把子类传递到父类的有参构造中,然后调用。
1700459085
1700459086 ❑使用反射的方式调用,你使用了反射还有谁不能调用的?!
1700459087
1700459088 ❑父类调用子类的静态方法。
1700459089
1700459090 这三种都是父类直接调用子类的方法,好用不?好用!解决问题了吗?解决了!项目中允许使用不?不允许!我就一直没有搞懂为什么要用父类调用子类的方法。如果一定要调用子类,那为什么要继承它呢?搞不懂。其实这个问题可以换个角度去理解,父类建立框架,子类在重写了父类部分的方法后,再调用从父类继承的方法,产生不同的结果(而这正是模板方法模式)。这是不是也可以理解为父类调用了子类的方法呢?你修改了子类,影响了父类行为的结果,曲线救国的方式实现了父类依赖子类的场景,模板方法模式就是这种效果。
1700459091
1700459092 模板方法在一些开源框架中应用非常多,它提供了一个抽象类,然后开源框架写了一堆子类。在《XXX In Action》中就说明了,如果你需要扩展功能,可以继承这个抽象类,然后覆写protected方法,再然后就是调用一个类似execute方法,就完成你的扩展开发,非常容易扩展的一种模式。
1700459093
1700459094
1700459095
1700459096
1700459097 设计模式之禅 [:1700453955]
1700459098 设计模式之禅 第11章 建造者模式
1700459099
[ 上一页 ]  [ :1.70045905e+09 ]  [ 下一页 ]