模版方法模式定義:定義一個操做中的算法的框架,而將一些步驟延遲到子類中,使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟算法
模版方法很簡單,平時咱們可能再也不沒意識中就使用到了,模版方法的方法分爲兩類:框架
基本方法:基本方法也叫作基本操做,是由子類實現的方法,而且在模版方法(父類的方法)被調用。ide
模版方法:能夠有一個或者多個,通常是一個具體實現的方法,實現對基本方法的調度,完成固定的邏輯this
模板方法模式的優勢:spa
模版方法模式的使用場景:設計
/** * @author Lin * @Date 2017/11/16. * @Description 抽象悍馬模型 */ public abstract class HummerModel { /** * 能啓動 */ abstract void start(); /** * 能中止 */ abstract void stop(); /** * 能打喇叭 */ abstract void alarm(); /** * 引擎能響 */ abstract void engineBoom(); /** * 能跑 */ public void run(){ this.start(); this.engineBoom(); this.alarm(); this.stop(); } }
/** * @author Lin * @Date 2017/11/16. */ public class HummerH1Model extends HummerModel { @Override void start() { System.out.println("悍馬H1發動........"); } @Override void stop() { System.out.println("悍馬H1熄火........"); } @Override void alarm() { System.out.println("悍馬H1打喇叭........"); } @Override void engineBoom() { System.out.println("悍馬H1引擎聲音,轟轟轟......."); } } /** * @author Lin * @Date 2017/11/16. */ public class HummerH2Model extends HummerModel { @Override void start() { System.out.println("悍馬H2發動........"); } @Override void stop() { System.out.println("悍馬H2熄火........"); } @Override void alarm() { System.out.println("悍馬H2打喇叭........"); } @Override void engineBoom() { System.out.println("悍馬H2引擎聲音,轟轟轟......."); } }
/** * @author Lin * @Date 2017/11/16. */ public class Client { public static void main(String[] args) { HummerModel h1 = new HummerH1Model(); h1.run(); HummerModel h2 = new HummerH2Model(); h2.run(); } }