模板方法模式是編程中經常用到的模式,它定義了一個操作的演算法骨架,將某些步驟延遲到子類實現。 這樣,新的子類可以在不改變一個演算法結構的前提下重新定義該演算法的某些特定步驟。 核心:處理某個流程的代碼都已具備,但其中某個節點的代碼暫時不能確定,所以將這個節點的代碼 實現轉移到子類完成。 例子:模擬一個銀行 ...
模板方法模式是編程中經常用到的模式,它定義了一個操作的演算法骨架,將某些步驟延遲到子類實現。
這樣,新的子類可以在不改變一個演算法結構的前提下重新定義該演算法的某些特定步驟。
核心:處理某個流程的代碼都已具備,但其中某個節點的代碼暫時不能確定,所以將這個節點的代碼
實現轉移到子類完成。
例子:模擬一個銀行取號業務流程。
/** * 模擬銀行取號排隊 */ public abstract class BankTemplateMethod { public void takeNumber(){ System.out.println("取號排隊"); } //辦理具體業務 public abstract void transact(); public void evaluate(){ System.out.println("反饋評分"); } /** * 模板方法,把基本操作組合在一起,防止惡意修改,一般用final修飾 */ public final void process(){ this.takeNumber(); this.transact(); this.evaluate(); } }
public class Client { public static void main(String[] args) { BankTemplateMethod btm = new DrawMoney(); btm.process(); } } //具體子類如果有其他業務繼續定義子類即可 class DrawMoney extends BankTemplateMethod{ @Override public void transact() { System.out.println("取款實現"); } }
模板方法模式在平時業務中很常用,基於繼承的方式(本質上就是多態)使得也比較容易實現。
模板方法有點類似方法回調,子類具體實現的方法就是一個鉤子方法。
在實際業務中,當我們要實現一個演算法,整體步驟很固定,但某些部分存在變法,那麼可以將變化
部分抽象出來,供子類實現。