我没办法发送图片
[历史归档]本文原发布于 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(){ACaraCar=newACar();aCar.run();BCarbCar=newBCar();bCar.run();}}备注
模板模式定义后续补充。