女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何通過模板模式重構(gòu)代碼

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 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):定義一個操作中的算法的框架, 而將一些步驟延遲到子類中。使得子類可以不改 變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

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

2、模板模式定義

圖片

①、AbstractClass 抽象模板

一、基本方法

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

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

二、模板方法

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

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

②、ConcreteClass 具體模板

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

3、模板模式通用代碼

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

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

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

}
public class ConcreteClass1 extends AbstractClass{

    @Override
    protected void customOperation() {
        // 具體模板1 業(yè)務(wù)邏輯
        System.out.println("具體模板1:customOperation()");
    }
}
public class ConcreteClass2 extends AbstractClass{
    @Override
    protected void customOperation() {
        // 具體模板2 業(yè)務(wù)邏輯
        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、模板模式優(yōu)點

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

把認(rèn)為是不變部分的算法封裝到父類實現(xiàn), 而可變部分的則可以通過繼承來繼續(xù)擴展。

②、提取公共部分代碼, 便于維護(hù)

③、行為由父類控制, 子類實現(xiàn)

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

5、模板模式缺點

①、子類執(zhí)行的結(jié)果影響了父類的結(jié)果,這和我們平時設(shè)計習(xí)慣顛倒了,在復(fù)雜項目中,會帶來閱讀上的難度。

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

6、回調(diào)

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

圖片

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是一個穩(wěn)定的final類,無法被繼承,不存在子類行為影響父類結(jié)果的問題,而Callback是一個接口,為了繼承而繼承的問題消失了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 封裝
    +關(guān)注

    關(guān)注

    128

    文章

    8618

    瀏覽量

    145137
  • 模板
    +關(guān)注

    關(guān)注

    0

    文章

    109

    瀏覽量

    20849
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4377

    瀏覽量

    64556
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4894

    瀏覽量

    70452
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    改善代碼質(zhì)量的6種重構(gòu)模式

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

    為什么要重構(gòu)?如何重組Python包?

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

    基于ATmega162的自重構(gòu)機器人控制模式

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

    模板方法模式在回溯算法中的應(yīng)用

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

    模板方法模式在回溯算法中的應(yīng)用

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

    一種基于體系結(jié)構(gòu)模板的粗粒度可重構(gòu)SoC設(shè)計方法

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

    使用英特爾SIMD數(shù)據(jù)布局模板提高矢量化效率

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

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

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

    HarmonyOS如何自動生成JS FA調(diào)用Java PA的模板代碼

    模板代碼,且模板代碼可能與業(yè)務(wù)代碼相互耦合,使得代碼可維護(hù)性和可讀性較差。于是,js2java-
    的頭像 發(fā)表于 09-28 10:09 ?2373次閱讀

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

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

    重構(gòu)或重新設(shè)計時驗證代碼

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

    如何借助GPT-4評審、重構(gòu)代碼

    重構(gòu)代碼之所以重要,有以下幾個原因:它增強了可讀性和可維護(hù)性,使開發(fā)人員更容易理解和修改代碼。它還有助于防止?jié)撛诘腻e誤,并確保您的代碼遵循已建立的最佳實踐。最終,
    的頭像 發(fā)表于 03-31 09:27 ?3104次閱讀

    設(shè)計模式行為型:模板方法模式

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

    代碼重構(gòu)的經(jīng)驗總結(jié)

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

    重構(gòu):改善既有代碼的設(shè)計」實戰(zhàn)篇

    代碼層面的整理,它更是一種軟件開發(fā)的哲學(xué),強調(diào)持續(xù)改進(jìn)和適應(yīng)變化的重要性。 ? ? 書中通過詳細(xì)的案例分析和代碼示例,將理論與實踐巧妙地融合在一起。我尤其贊賞作者 如何將復(fù)雜的重構(gòu)任務(wù)
    的頭像 發(fā)表于 08-14 10:42 ?573次閱讀
    「<b class='flag-5'>重構(gòu)</b>:改善既有<b class='flag-5'>代碼</b>的設(shè)計」實戰(zhàn)篇