在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何通過模板模式重構代碼

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-08 16:15 ? 次閱讀

1、什么是模板模式?

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.

模板方法模式(Template Method Pattern):定義一個操作中的算法的框架, 而將一些步驟延遲到子類中。使得子類可以不改 變一個算法的結構即可重定義該算法的某些特定步驟。

說人話:父類模板方法定義不變的流程,子類重寫流程中的方法。

2、模板模式定義

圖片

①、AbstractClass 抽象模板

一、基本方法

上面的 baseOperation() 或者 customOperation() 方法,也叫基本操作,是由子類實現的方法,并且在模板方法中被調用。

基本方法盡量設計為protected類型, 符合迪米特法則, 不需要暴露的屬性或方法盡量不要設置為protected類型。實現類若非必要, 盡量不要擴大父類中的訪權限。

二、模板方法

上面的 templateMethod() 方法,可以有一個或者幾個,實現對基本方法的調度,完成固定的邏輯。

為了防止惡意操作,通常模板方法都加上 final 關鍵字,不允許覆寫。

②、ConcreteClass 具體模板

實現父類定義的一個或多個抽象方法,也就是父類定義的基本方法在子類中得以實現。

3、模板模式通用代碼

public abstract class AbstractClass {
    // 共同的且繁瑣的操作
    private void baseOperation() {
        // do something
    }

    // 由子類定制的操作
    protected abstract void customOperation();

    // 模板方法定義的框架
    public final void templateMethod() {
        /**
         * 調用基本方法,完成固定邏輯
         */
        baseOperation();
        customOperation();
    }

}
public class ConcreteClass1 extends AbstractClass{

    @Override
    protected void customOperation() {
        // 具體模板1 業務邏輯
        System.out.println("具體模板1:customOperation()");
    }
}
public class ConcreteClass2 extends AbstractClass{
    @Override
    protected void customOperation() {
        // 具體模板2 業務邏輯
        System.out.println("具體模板2:customOperation()");
    }
}

測試:

public class TemplateClient {
    public static void main(String[] args) {
        AbstractClass abstractClass1 = new ConcreteClass1();
        AbstractClass abstractClass2 = new ConcreteClass2();
        applyTemplate(abstractClass1);
        applyTemplate(abstractClass2);
    }

    public static void applyTemplate(AbstractClass abstractClass){
        abstractClass.templateMethod();
    }
}

4、模板模式優點

①、封裝不變部分, 擴展可變部分

把認為是不變部分的算法封裝到父類實現, 而可變部分的則可以通過繼承來繼續擴展。

②、提取公共部分代碼, 便于維護

③、行為由父類控制, 子類實現

基本方法是由子類實現的, 因此子類可以通過擴展的方式增加相應的功能, 符合開閉原則。

5、模板模式缺點

①、子類執行的結果影響了父類的結果,這和我們平時設計習慣顛倒了,在復雜項目中,會帶來閱讀上的難度。

②、可能引起子類泛濫和為了繼承而繼承的問題

6、回調

為了解決模板模式的缺點,我們可以利用回調函數代替子類繼承。

圖片

public interface Callback {
    void customOperation();
}
public class SubCallback implements Callback{
    @Override
    public void customOperation() {
        System.out.println("SubCallback customOperation");
    }
}
/**
 * 模板類
 * 聲明為 final,無法被繼承
 */
public final class Template {
    private void baseOperation(){
        System.out.println("模板類公共操作");
    }

    public void templateMethod(Callback callback){
        baseOperation();
        callback.customOperation();
    }
}

測試:

public class TemplateClient {
    public static void main(String[] args) {
        Template template = new Template();
        applyTemplate(template);
    }

    public static void applyTemplate(Template template){
        Callback callback = new SubCallback();
        template.templateMethod(callback);
    }
}

Template是一個穩定的final類,無法被繼承,不存在子類行為影響父類結果的問題,而Callback是一個接口,為了繼承而繼承的問題消失了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 封裝
    +關注

    關注

    128

    文章

    8497

    瀏覽量

    144784
  • 模板
    +關注

    關注

    0

    文章

    109

    瀏覽量

    20823
  • 函數
    +關注

    關注

    3

    文章

    4370

    瀏覽量

    64194
  • 代碼
    +關注

    關注

    30

    文章

    4886

    瀏覽量

    70255
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    改善代碼質量的6種重構模式

    根據上面所討論的代碼壞味道,下面給出可以有效解決這些問題的6種重構模式,合理使用這些模式能夠幫你解決大多數的代碼質量問題并成為一名更優秀的開發者。1.抽取類與移動方法:如上所述,諸如過
    發表于 12-12 16:09

    為什么要重構?如何重組Python包?

    導航時,它們也是您最好的GPS導航器。  開始重構—重組/重組  在本節中,我將config.py通過重組結構,合并重復的方法,分解和編寫測試代碼以確保向后兼容性,向您展示一個示例
    發表于 09-15 15:28

    基于ATmega162的自重構機器人控制模式

    本文通過對自重構機器人的特點和總體結構進行分析,提出一種基于ATmega162 的部分主從分布式控制模式,該模式利用ATmega162 的外擴存儲器功能實現擴展總線,從而對自
    發表于 06-18 10:49 ?39次下載

    模板方法模式在回溯算法中的應用

    描述了模板方法模式及回溯算法的模板方法模式的Java 語言實現,該實現使得回溯算法的實現達到了可擴展性、靈活性和可插入性三個目標,提高了算法的可維護性和可復用性。
    發表于 01-15 16:48 ?20次下載

    模板方法模式在回溯算法中的應用

    描述了模板方法模式及回溯算法的模板方法模式的Java 語言實現,該實現使得回溯算法的實現達到了可擴展性、靈活性和可插入性三個目標,提高了算法的可維護性和可復用性。
    發表于 01-15 16:51 ?0次下載

    一種基于體系結構模板的粗粒度可重構SoC設計方法

    針對傳統的面向應用領域的多核SoC體系結構設計方法存在系統結構探索空間大、設計復雜度高等問題,提出了一種基于體系結構模板的粗粒度可重構SoC系統架構設計方法。該設計方法以體系結構設計為中心,體系結構模板
    發表于 11-29 10:12 ?0次下載
    一種基于體系結構<b class='flag-5'>模板</b>的粗粒度可<b class='flag-5'>重構</b>SoC設計方法

    使用英特爾SIMD數據布局模板提高矢量化效率

    了解英特爾?SIMD數據布局模板(英特爾?SDLT)可通過指定首選SIMD數據布局來提高性能,而無需重構代碼
    的頭像 發表于 11-05 07:10 ?2302次閱讀

    MM32單片機的模板代碼合集免費下載

      本文檔的主要內容詳細介紹的是MM32單片機的模板代碼合集免費下載。
    發表于 10-14 17:16 ?363次下載
    MM32單片機的<b class='flag-5'>模板</b><b class='flag-5'>代碼</b>合集免費下載

    HarmonyOS如何自動生成JS FA調用Java PA的模板代碼

    模板代碼,且模板代碼可能與業務代碼相互耦合,使得代碼可維護性和可讀性較差。于是,js2java-
    的頭像 發表于 09-28 10:09 ?2332次閱讀

    SOC課程——③——Verilog程序(典型電路的模板

    典型電路的模板1 模板代碼1.1 輸出時序邏輯的模板代碼1.1.1 異步復位的時序電路(用的最多)1.1.2 同步復位的時序電路1.2 輸出
    發表于 12-22 18:57 ?4次下載
    SOC課程——③——Verilog程序(典型電路的<b class='flag-5'>模板</b>)

    重構或重新設計時驗證代碼

      與重新設計相反,重構是一種優化代碼內部實現的努力,以提高其可維護性并降低其總體運營成本。和許多人一樣,我相信軟件重構的最佳定義之一是由Martin Fowler在他的“重構書”中寫
    的頭像 發表于 11-25 15:17 ?596次閱讀

    如何借助GPT-4評審、重構代碼

    重構代碼之所以重要,有以下幾個原因:它增強了可讀性和可維護性,使開發人員更容易理解和修改代碼。它還有助于防止潛在的錯誤,并確保您的代碼遵循已建立的最佳實踐。最終,
    的頭像 發表于 03-31 09:27 ?3081次閱讀

    設計模式行為型:模板方法模式

    模板模式中,一個抽象類公開定義了執行它的方法的方式/模板
    的頭像 發表于 06-07 15:13 ?748次閱讀
    設計<b class='flag-5'>模式</b>行為型:<b class='flag-5'>模板</b>方法<b class='flag-5'>模式</b>

    代碼重構的經驗總結

    具體的重構手段可參考《代碼大全2》或《重構:改善既有代碼的設計》,本文不再班門弄斧,而側重重構時一些粗淺的“方法論”,旨在提高
    的頭像 發表于 08-23 10:10 ?816次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>重構</b>的經驗總結

    重構:改善既有代碼的設計」實戰篇

    代碼層面的整理,它更是一種軟件開發的哲學,強調持續改進和適應變化的重要性。 ? ? 書中通過詳細的案例分析和代碼示例,將理論與實踐巧妙地融合在一起。我尤其贊賞作者 如何將復雜的重構任務
    的頭像 發表于 08-14 10:42 ?523次閱讀
    「<b class='flag-5'>重構</b>:改善既有<b class='flag-5'>代碼</b>的設計」實戰篇
    主站蜘蛛池模板: se94se亚洲欧美在线 | 视频一区二区免费 | 免费人成在线观看网站品爱网 | 精品视频69v精品视频 | 色在线播放 | 侵犯希崎中文字幕在线 | 美女被拍拍拍拍拍拍拍拍 | 手机看片日韩高清1024 | 4444狠狠| 日本免费一级 | 浮荡视频在线观看免费 | 日本久久久久久久 | 欧美拍拍| 激情狠狠干| 亚洲人的天堂男人爽爽爽 | 天堂成人精品视频在线观 | 成人久久久 | 国产精品伦理久久久久 | 免费爱爱视频网站 | se94se欧美 | 欧美国产精品主播一区 | 欧美激情五月 | 免费一级毛片无毒不卡 | 免费播放一区二区三区 | 永久在线 | 三级黄色免费网站 | 午夜资源| www.一区二区 | 亚洲国产午夜精品理论片的软件 | 欧美刺激午夜性久久久久久久 | 黄黄的网站在线观看 | 一级欧美视频 | 欧美精品一区二区三区在线播放 | 99亚洲精品卡2卡三卡4卡2卡 | 午夜高清福利 | 色色色色色网 | 国产吧在线视频 | 推倒都市极品贵妇 | 三级在线观看国产 | 亚洲国产第一区二区香蕉 | 99免费观看视频 |