模板方法模式(Template Method)

1、模板方法模式介紹html

模板方法模式:定義一個操做中的算法骨架,而將一些步驟延遲到子類中。模板方法使得子類能夠不改變一個算法的結構便可重定義該算法的java

某些特定步驟。算法

核心:處理某個流程的代碼已經都具有,可是其中某個節點的代碼暫時不能肯定。所以,咱們採用工廠方法模式,將這個節點的代碼實現轉移給spring

子類完成。即:處理步驟在父類中定義好,具體的實現延遲到子類中定義。數據庫

說白了,就是將一些相同操做的代碼,封裝成一個算法的骨架。核心的部分留在子類中操做,在父類中只把那些骨架作好。設計模式

例如:框架

1.去銀行辦業務,銀行給咱們提供了一個模板就是:先取號,排對,辦理業務(核心部分咱們子類完成),給客服人員評分,完畢。ide

   這裏辦理業務是屬於子類來完成的,其餘的取號,排隊,評分則是一個模板。函數

2.去餐廳吃飯,餐廳給提供的一套模板就是:先點餐,等待,吃飯(核心部分咱們子類完成),買單單元測試

   這裏吃飯是屬於子類來完成的,其餘的點餐,買單則是餐廳提供給咱們客戶的一個模板。

模板方法UML圖:

 

2、模板方法代碼實現

這裏使用銀行辦理業務爲例

首先,定義一個模板。模板中把辦理業務用做核心部分,讓子類來實現。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//模板抽象方法
public abstract class BankTemplateMethod {
     //模板方法中其餘業務邏輯
     //1.取號排隊
     public void takeNumber(){
         System.out.println( "取號排隊" );
     }
     //2.辦理具體的業務:這裏留給子類來實現!!!
     public abstract void transact();
     //3.給客服評分
     public void evaluate(){
         System.out.println( "反饋評分" );
     }
     //模板方法
     public final void process(){
         this .takeNumber();
         this .transact(); //這裏則是具體的模板方法函數
         this .evaluate();
     }
}

而後定義具體的模板方法的子類

 

1
2
3
4
5
6
7
//子類實現模板方法:取款
public class DrawMoney extends BankTemplateMethod{
     @Override
     public void transact() {
         System.out.println( "我要取款" );
     }
}

客戶端測試

 

1
2
3
//定義子類方式實現模板方法
BankTemplateMethod template = new DrawMoney();
template.process();

打印結果:

 

        取號排隊

        我要取款

        反饋評分

固然,也可使用一個匿名內部類的方式來實現這種模板方法。

1
2
3
4
5
6
7
8
BankTemplateMethod template1 = new BankTemplateMethod() {
     //這裏使用匿名內部類實現:只需實現具體業務部分,其餘部分則使用模板方法定義好的骨架
     @Override
     public void transact() {
         System.out.println( "我要存錢" );
     }
};
template1.process();

打印結果也是同樣:

        取號排隊

        我要存錢

        反饋評分

 

3、總結

何時用模板方法模式?

實現一些操做時,總體步驟很固定,可是呢。就是其中一小部分容易變,這時候可使用模板方法模式,將容易變的部分抽象出來,供子類實現。

開發中常見場景:

        其實,各個框架中,都有模板方法模式的影子。

        數據庫訪問的封裝

        Junit單元測試

        servlet中關於doGet/doPost方法的調用

        Hibernate中模板程序

        spring中JDBCTemplate,HibernateTemplate等等

 

 



Java23種設計模式學習筆記【目錄總貼】

參考資料:

  大話設計模式(帶目錄完整版).pdf

  HEAD_FIRST設計模式(中文版).pdf

  尚學堂_高淇_java300集最全視頻教程_【GOF23設計模式】

相關文章
相關標籤/搜索