我没办法发送图片[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2013-10-11 标题设计模式学习笔记模板模式分类编程 / 设计模式 / java 标签设计模式·java·模板模式设计模式学习笔记模板模式备注模板方法模式Template Method Pattern在父类中定义算法骨架将具体步骤延迟到子类实现同时通过钩子方法给子类提供可选的扩展点。示例代码https://github.com/cstriker1407/design_pattern模板模式比较简单直接看代码/** * 父类设计成抽象类供子类继承。 */abstractclassCarModel{// start/stop/alarm 对外不可见设计为 protectedprotectedabstractvoidstart();protectedabstractvoidstop();protectedabstractvoidalarm();// run 设置为 final固化算法骨架防止子类重写publicfinalvoidrun(){start();if(isAlarm()){alarm();}stop();}// 钩子方法子类可覆写来控制是否触发 alarm默认为 trueprotectedbooleanisAlarm(){returntrue;}}classACarextendsCarModel{Overrideprotectedvoidstart(){System.out.println(A Car Start);}Overrideprotectedvoidstop(){System.out.println(A Car Stop);}Overrideprotectedvoidalarm(){System.out.println(A Car Alarm);}OverrideprotectedbooleanisAlarm(){returnfalse;}// A 车不报警}classBCarextendsCarModel{Overrideprotectedvoidstart(){System.out.println(B Car Start);}Overrideprotectedvoidstop(){System.out.println(B Car Stop);}Overrideprotectedvoidalarm(){System.out.println(B Car Alarm);}OverrideprotectedbooleanisAlarm(){returntrue;}// B 车报警}publicclassTemplateTest{publicstaticvoidtest(){ACaraCarnewACar();aCar.run();BCarbCarnewBCar();bCar.run();}}备注模板模式定义后续补充。