java23种设计模式个人整理_java23种设计模式-行为型模式之模板方法模式
定義:
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):實現了模板方法,定義了算法的骨架。
具體類(ConcreteClass):實現抽象類中的抽象方法,已完成完整的算法。
優點
模板方法模式通過把不變的行為搬移到超類,去除了子類中的重復代碼。
子類實現算法的某些細節,有助于算法的擴展。
通過一個父類調用子類實現的操作,通過子類擴展增加新的行為,符合“開放-封閉原則”。
缺點
每個不同的實現都需要定義一個子類,這會導致類的個數的增加,設計更加抽象。
使用場景
- 多個子類有公有的方法,并且邏輯基本相同時;
- 重要,復雜的算法,可以把核心算法設計為模板方法,周邊的相關細節功能則由各個子類實現;
- 重構時,模板方法模式 是一個經常使用的模式,把相同的代碼抽取到父類,然后通過鉤子函數約束其行為;
- 控制子類擴展,子類必須遵守算法規則。
具體實現:
模板方法模式(Template Method)
解釋一下模板方法模式,就是指:一個抽象類中,有一個主方法,再定義1...n個方法,可以是抽象的,也可以是實際的方法,定義一個類,繼承該抽象類,重寫抽象方法,通過調用抽象類,實現對子類的調用,先看個關系圖:
就是在AbstractCalculator類中定義一個主方法calculate,calculate()調用spilt()等,Plus和Minus分別繼承AbstractCalculator類,通過對AbstractCalculator的調用實現對子類的調用,看下面的例子:
抽象類:
實現類:
測試類:
輸出:16
我跟蹤下這個小程序的執行過程:首先將exp和"+"做參數,調用AbstractCalculator類里的calculate(String,String)方法,在calculate(String,String)里調用同類的split(),之后再調用calculate(int ,int)方法,從這個方法進入到子類中,執行完return num1 + num2后,將值返回到AbstractCalculator類,賦給result,打印出來。正好驗證了我們開頭的思路。
總結
以上是生活随笔為你收集整理的java23种设计模式个人整理_java23种设计模式-行为型模式之模板方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bat从数组中找出相同数字并删除_找到所
- 下一篇: cvtcolor python open