标签:父类 start nbsp private rri logs 方法 oom set
模板方法模式定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
抽象类的父类,父类中定义了基本方法,模板方法和钩子方法。
基本方法:父类中定义,在子类中实现。
模板方法:父类中实现,调用基本方法,子类继承。
钩子方法:在父类中定义,变相的实现父类调用子类的方法。
具体例子如下:
父类:
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决定,实现了在父类中调用子类的方法。
标签:父类 start nbsp private rri logs 方法 oom set
原文地址:http://www.cnblogs.com/maple92/p/6670595.html