Darknet訓練CIFAR分類器
阿新 • • 發佈:2020-10-12
模板方法模式
一、簡介
對於一個演算法所需的關鍵步驟確定了順序後,各個步驟的具體實現是未知的,如果遇到這類問題那麼就可以採用模板方法模式解決。
定義:定義一個操作中的演算法的框架而將一些步驟延遲到子類中,使子類可以不改變一個演算法的結構即可衝定義該演算法的某些特定步驟。
二、使用場景
- 多個子類公有的方法並且邏輯基本相同時
- 重要、複雜的演算法,可以把核心演算法設計為模板方法,周邊的相關細節功能則由各個子類實現
- 重構時,模板方法模式可以把相同的程式碼抽取到父類中,然後通過鉤子函式約束其行為
三、簡單實現
這裡以把大象放入冰箱為例來實現模板方法,我們知道把大象放入冰箱需要三步,三步順序是固定的但是每一步具體實現是可變的,比如放入冰箱的可以是大象也可以是小象
//抽象模板類 public abstract class AbstractTemplate{ protected void openfridgedoor(){ Log.i(TAG, "openfridgedoor: 開啟冰箱門"); } protected void putElephant(){ Log.i(TAG, "putElephant: 放入大象"); } protected void closefridgedoor(){ Log.i(TAG, "closefridgedoor: 關閉冰箱門"); } public final void start(){ openfridgedoor(); putElephant(); closefridgedoor(); Log.i(TAG, "start: suc"); } } //具體實現類 public class SmallElephant extends AbstractTemplate{ @Override protected void putElephant() { Log.i(TAG, "putElephant: 放入小象"); } } public void Test(){ SmallElephant smallElephant=new SmallElephant(); smallElephant.start(); }
四、小結
Android中模板方法的應用可以參考AsyncTask或Activity宣告周期函式。總結來說模板方法模式就是對流程的封裝,即把某些固定流程封裝到一個final函式中並讓子類能夠定製該流程中的步驟的實現。
- 優點
封裝不變部分,擴充套件可變部分,提取公共程式碼便於維護
- 缺點
該模式會帶來程式碼閱讀難度會讓使用者覺得難以理解