定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。 模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。通俗的說的就是有很多相同的步驟的,在某一些地方可能有一些差別適合於這種模式,如大話設計模式中說到的考試場景中,每個人的試卷都是一樣的,只有答案不一樣。這種場景就適合於模板方法模式。我這次自己寫的是一個汽車啟動的過程,每一種汽車啟動的過程都基本是一樣的流程,無非是這一過程中存在一些細小差別。
package com.roc.template; /** * 汽車模型 * 模型模式 * @author liaowp * */ public abstract class CarModel { /** * 汽車啟動 */ protected abstract void start(); /** * 停車 */ protected abstract void stop(); /** * 用戶並不需要關注你的車怎麼啟動或者停下來的,可以開可以停就可以啦 */ final public void excet(){ this.start(); this.stop(); } }
package com.roc.template; /** * 大眾車 * @author liaowp * */ public class Wcar extends CarModel{ @Override protected void start() { System.out.println("大眾車啟動 。。。。。。。。突突突"); } @Override protected void stop() { System.out.println("大眾車停車。。。。。。。。。"); } }
package com.roc.template; public class Ocar extends CarModel{ @Override protected void start() { System.out.println("奧迪 無匙啟動 突突突"); } @Override protected void stop() { System.out.println("奧迪 停車 "); } }
package com.roc.template; /** * 客戶端 * @author liaowp * */ public class Client { public static void main(String[] args) { CarModel wcar=new Wcar();//家裡的第一輛車,作為用戶的我們並不需要關注車怎麼啟動的.子類變量變為父類。多態 wcar.excet(); //突然家裡需要第二輛車了 奧迪 我們也不需要關注他怎麼生產啟動的 CarModel ocar=new Ocar(); ocar.excet(); } }
模板方法模式適用場景