设计模式-------模板方法模式
Posted Topze
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-------模板方法模式相关的知识,希望对你有一定的参考价值。
模板方法模式定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
抽象类的父类,父类中定义了基本方法,模板方法和钩子方法。
基本方法:父类中定义,在子类中实现。
模板方法:父类中实现,调用基本方法,子类继承。
钩子方法:在父类中定义,变相的实现父类调用子类的方法。
具体例子如下:
父类:
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决定,实现了在父类中调用子类的方法。
以上是关于设计模式-------模板方法模式的主要内容,如果未能解决你的问题,请参考以下文章