模板模式
定義: Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.(定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。)
AbstractClass叫做抽象模板,它的方法分為兩類:
● 基本方法
基本方法也叫做基本操作,是由子類實現的方法,並且在模板方法被調用。
● 模板方法
可以有一個或幾個,一般是一個具體方法,也就是一個框架,實現對基本方法的調度,完成固定的邏輯。
注意: 為了防止惡意的操作,一般模板方法都加上final關鍵字,不允許被覆寫。
具體模板:如ConcreteClass1和ConcreteClass2屬於具體模板,實現父類所定義的一個或多個抽象方法,也就是父類定義的基本方法在子類中得以實現
使用場景:
● 多個子類有公有的方法,並且邏輯基本相同時。
● 重要、複雜的算法,可以把核心算法設計為模板方法,周邊的相關細節功能則由各個子類實現。
● 重構時,模板方法模式是一個經常使用的模式,把相同的代碼抽取到父類中,然後通過鉤子函數約束其行為。
如業務模板
說明:
1、monitorMetrix,監聽名稱,一般傳類方法名,會通過日誌打印process方法執行時間
2、checParam 用於參數檢查,如果實現了該方法就會默認執行
3、process 執行方法,該方法為具體實現的業務邏輯
4、afterProcess 後處理方法,如釋放資源等
模板具體實現方法excute,final 關鍵字禁止覆蓋,
該方法定義好執行過程,先執行checkParam檢查參數,然後執行process方法,該方法由子類具體實現,
在process前後通過Stopwatch 記錄方法執行時間
業務代碼中的應用
將業務要執行的代碼 放到process中即可,然後執行模板中的excute方法,
此處注意返回值的泛型哦,
這只是實際開發中的一種常用方式,如有不同見解歡迎多指點多交流,
下一篇會水一篇,關於參數的一個技巧性的小規範,多多關注
閱讀更多 BeginCode 的文章