首页 > 代码库 > 设计模式-------模板方法模式
设计模式-------模板方法模式
模板方法模式定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
抽象类的父类,父类中定义了基本方法,模板方法和钩子方法。
基本方法:父类中定义,在子类中实现。
模板方法:父类中实现,调用基本方法,子类继承。
钩子方法:在父类中定义,变相的实现父类调用子类的方法。
具体例子如下:
父类:
1 package pattern.templateMethod; 2 3 public abstract class HummerModel { 4 5 // 基本方法 6 protected abstract void start(); 7 8 // 基本方法 9 protected abstract void stop(); 10 11 // 基本方法 12 protected abstract void alarm(); 13 14 // 基本方法 15 protected abstract void engineBoom(); 16 17 // 模板方法 18 protected void run() { 19 this.start(); 20 this.engineBoom(); 21 if (this.isAlarm()) { 22 this.alarm(); 23 } 24 this.stop(); 25 } 26 27 // 钩子方法 28 protected boolean isAlarm() { 29 return true; 30 } 31 32 }
子类1:
1 package pattern.templateMethod; 2 3 public class HummerH1Model extends HummerModel { 4 5 private boolean alarmFlag = true; 6 7 @Override 8 protected void start() { 9 10 System.out.println("H1 start...."); 11 } 12 13 @Override 14 protected void stop() { 15 System.out.println("H1 stop....."); 16 } 17 18 @Override 19 protected void alarm() { 20 System.out.println("H1 alarm....."); 21 } 22 23 @Override 24 protected void engineBoom() { 25 System.out.println("H1 engineBoom"); 26 } 27 28 @Override 29 protected boolean isAlarm() { 30 return this.alarmFlag; 31 } 32 33 public void setAlarm(boolean isAlarm){ 34 this.alarmFlag = isAlarm; 35 } 36 37 38 }
子类2:
package pattern.templateMethod; public class HummerH2Model extends HummerModel { @Override protected void start() { System.out.println("H2 start...."); } @Override protected void stop() { System.out.println("H2 stop....."); } @Override protected void alarm() { System.out.println("H2 alarm....."); } @Override protected void engineBoom() { System.out.println("H2 engineBoom"); } }
alarm方法是否调用由子类中的setAlarm决定,实现了在父类中调用子类的方法。
设计模式-------模板方法模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。