設計模式 - 模板方法模式 Template Method
阿新 • • 發佈:2020-07-18
總結
該模式在父類中定義了一個“主流程方法Template Method”(或者稱作骨架方法),主流程方法包含了許多空/非空的“子方法”。這些子方法(被稱作鉤子方法),可以被不同的子類實現自己獨特的邏輯,但是又不破壞父類中的主流程方法邏輯。使得不同的子類中,“流程一致,具體邏輯不同”。
詳細解析
假設父類是一個“審批貸款”ApproveLoan,規定了一個審批貸款的主流程方法templateMethod(),包含了審批貸款的三個步驟。所有的銀行都要按照這三個步驟來操作,只不過具體的操作的邏輯不同。可以看到step1和step2是空方法,讓子類去實現自己的邏輯;step3是國家統一的規定,預設按照國家的規定操作(當然step3還是能被子類覆蓋的)。
//approve loan 審批貸款 public abstract class ApproveLoan{ //審批貸款的主流程方法 //步驟1:提交表格 //步驟2:稽核若干天 //步驟3:審批通過,放款 public void templateMethod(){ step1(); step2(); step3(); } //步驟1:提交表格 public abstract void step1(); //步驟2:稽核若干天 public abstract void step2(); //步驟3:審批通過,放款 public void step3(){ System.out.println("國家統一規定,只能放款60萬元..."); } }
具體的子類有招商銀行,和農業銀行。兩個銀行的前兩步不盡相同,因此如果呼叫不同的銀行物件,主流程都是這三步,但是細節是不同的。
//招商銀行 public class ZhaoShangBank extends ApproveLoan{ @Override public void step1(){ //步驟1:提交表格 System.out.println("招商銀行,需要提交身份證影印件..."); } @Override public void step2(){ //步驟2:稽核若干天 System.out.println("招商銀行,稽核5天..."); } } //農業銀行 public class NongyeBank extends ApproveLoan{ @Override public void step1(){ //步驟1:提交表格 System.out.println("農業銀行,需要提交身份證影印件+戶口本..."); } @Override public void step2(){ //步驟2:稽核若干天 System.out.println("農業銀行,稽核10天..."); } }