《您的设计模式》(CBF4LIFE)之“模板方法模式”【整理】
来源:互联网 发布:压缩软件for mac 编辑:程序博客网 时间:2024/06/05 00:32
模板方法:如下,把抽象类上的四个方法设置为protected访问权限,这四个方法都由子类来实现,那就设置成protected模式,run方法子类都不修改,可以设置成final类型
package com.teng.pattern.impl;/** * 悍马抽象类,模板设计模式 * <br>创建日期:2016年7月2日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */public abstract class HummerModel {//发动protected abstract void start();//停车protected abstract void stop();//喇叭protected abstract void alarm();//引擎响protected abstract void engineBoom();/** * 跑 * @since 1.0 * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年7月2日 下午11:10:29 */final public void run(){//发动this.start();//引擎轰鸣this.engineBoom();//喇叭想让它响就响,不想让它响就不响if(this.isAlarm()){this.alarm();}//停车this.stop();}//钩子方法,默认喇叭会响protected boolean isAlarm(){return true;}}
run方法定义了调用其它方法的顺序,并且子类是不能修改的,这个叫做模板方法;start、stop、alarm、engineBoom这四个方法是子类必须实现的,而且这四个方法的修改对应了不同的类,这个叫做基本方法,基本方法又分为三种:在抽象类中实现了的基本方法叫做具体方法;在抽象类中没有实现,在子类中实现了叫做抽象方法,我们这四个基本方法都是抽象方法,由子类来实现;还有一种叫做钩子方法。
增加的一个方法,isAlarm(),喇叭要不要响,这就是钩子方法,钩子方法模式是由抽象类来实现,子类可以重写:
package com.teng.pattern.impl;/** * 悍马2模型 * <br>创建日期:2016年7月2日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */public class HummerH2Model extends HummerModel {//是否要按喇叭private boolean alarmFlag = true;@Overrideprotected void start() {System.out.println("悍马H2发动。。。");}@Overrideprotected void stop() {System.out.println("悍马H2停车。。。");}@Overrideprotected void alarm() {System.out.println("悍马H2鸣笛。。。");}@Overrideprotected void engineBoom() {System.out.println("悍马H2引擎。。。");}@Overrideprotected boolean isAlarm(){return this.alarmFlag;}/** * 要不要按喇叭,由客户决定 * @since 1.0 * @param isAlarm * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年7月2日 下午11:31:50 */public void setAlarm(boolean isAlarm){this.alarmFlag = isAlarm;}}
客户使用:
package com.teng.pattern.impl;/** * 客户 * <br>创建日期:2016年7月2日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */public class Client {/** * 主方法 * @since 1.0 * @param args * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年7月2日 下午11:36:12 */public static void main(String[] args) {HummerH2Model h2 = new HummerH2Model();h2.setAlarm(false);h2.run();}}
总结一下模板模式,模板方法模式就是在模板方法中按照一个规则和顺序调用基本方法。
模板方法是通过汇总或排序基本方法而产生的结果集。
在重写了父类部分方法后,再调用从父类继承的方法,产生不同的结果(而这正是模板方法模式),这是不是也可以理解为父类调用了子类的方法呢?你修改了子类,影响了父类的结果,模板方法模式就是这样效果。
0 0
- 《您的设计模式》(CBF4LIFE)之“模板方法模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“策略模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“代理模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“门面模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“适配器模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“桥梁模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“命令模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“装饰模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“迭代器模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“组合模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“观察者模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“访问者模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“状态模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“工厂方法模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“单例模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“多例模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“抽象工厂模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“建造者模式”【整理】
- 第九周 项目3 建立稀疏矩阵表示的三元组算法库
- 使用国内docker 镜像仓库
- 【第九周 项目2-对称矩阵压缩存储的实现与应用(1)】
- BufferedReader获取json的时候有中文乱码解决
- Android加载超长图(微博长图)
- 《您的设计模式》(CBF4LIFE)之“模板方法模式”【整理】
- Android gdb调试方法
- stm32 堆和栈(stm32 Heap & Stack)
- Eclipse快捷键
- ECMAScript 6简介
- 第9周项目3-稀疏矩阵的三元组表示的实现及应用(1)
- SIFT特征提取-应用篇
- 云服务总线
- shell脚本简单密码加密