最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設計模式之策略模式深入刨析

 更新時間:2022年05月16日 09:51:27   作者:行萬里路,讀萬卷書  
策略模式屬于Java 23種設計模式中行為模式之一,該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。本文將通過示例詳細講解這一模式,需要的可以參考一下

1.基本介紹

1)策略模式(Strategy Pattern)中,定義算法族(策略組),分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶

2)這算法體現(xiàn)了幾個設計原則,第一,把變化的代碼從不變的代碼中分離出來;第二,針對接口編程而不是具體類(定義了策略接口);第三,多用組合/聚合,少用繼承(客戶通過組合方式使用策略)

例如:針對環(huán)境節(jié)能,提出了三種節(jié)能方式:基帶板節(jié)能,SPC節(jié)能,產(chǎn)品節(jié)能,不同的節(jié)能方式,對環(huán)境設備的具體處理流程不同

2.傳統(tǒng)方式

(1)類圖

(2)編碼實現(xiàn)

1)定義一個EsPolicy抽象類,定義esPolicyHandler方法

public abstract class EsPolicy {
    public void esPolicyHandler() {
    }
}

2)BbEsPolicy繼承EsPolicy,并復寫esPolicyHandler方法

public class BbEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===處理基帶板節(jié)能策略===");
    }
}

3)SpcEsPolicy繼承EsPolicy,并復寫esPolicyHandler方法

public class SpcEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===Spc節(jié)能策略處理===");
    }
}

4)ProdEsPolicy繼承EsPolicy,并復寫esPolicyHandler方法

public class ProdEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===產(chǎn)品節(jié)能策略處理===");
    }
}

5)測試

public class EsPolicyTest {
    public static void main(String[] args) {
        EsPolicy bbEsPolicy = new BbEsPolicy();
        bbEsPolicy.esPolicyHandler();
        SpcEsPolicy spcEsPolicy = new SpcEsPolicy();
        spcEsPolicy.esPolicyHandler();
        ProdEsPolicy prodPolicy = new ProdEsPolicy();
        prodPolicy.esPolicyHandler();
    }
}

執(zhí)行結果

===處理基帶板節(jié)能策略===
===Spc節(jié)能策略處理===
===產(chǎn)品節(jié)能策略處理===

問題:傳統(tǒng)方法是通過子類繼承父類并復寫父類方法來實現(xiàn)不同子類的不同行為,對類的局部改動,尤其是超類的局部改動,會影響其它部分,會有溢出效應

3.采用策略模式

(1)類圖

(2)編碼實現(xiàn)

1)定義策略接口并定義抽象方法

public interface EsPolicyHandler {
    void esPolicyHandler();
}

2)BbEsPolicyHandler實現(xiàn)策略接口,并實現(xiàn)esPolicyHandler方法

public class BbEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===基帶板節(jié)能策略處理===");
    }
}

3)SpcEsPolicyHandler實現(xiàn)策略接口,并實現(xiàn)esPolicyHandler方法

public class SpcEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===Spc節(jié)能策略處理===");
    }
}

4)ProdEsPolicyHandler實現(xiàn)策略接口,并實現(xiàn)esPolicyHandler方法

public class ProdEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===產(chǎn)品節(jié)能策略處理===");
    }
}

5)定義EsPolicy抽象類,注入EsPolicyHandler作為其屬性

public abstract class EsPolicy {
    EsPolicyHandler esPolicyHandler;
    public void setEsPolicyHandler(EsPolicyHandler esPolicyHandler) {
        this.esPolicyHandler = esPolicyHandler;
    }
    public void esPolicyHandler() {
        if (null != esPolicyHandler) {
            esPolicyHandler.esPolicyHandler();
        }
    }
}

6)BbEsPolicy繼承EsPolicy,在構造方法中實例化esPolicyHandler接口屬性

public class BbEsPolicy extends EsPolicy {
    public BbEsPolicy() {
        esPolicyHandler = new BbEsPolicyHandler();
    }
}

7)SpcEsPolicy繼承EsPolicy,在構造方法中實例化esPolicyHandler接口屬性

public class SpcEsPolicy extends EsPolicy {
    public SpcEsPolicy() {
        esPolicyHandler = new SpcEsPolicyHandler();
    }
}

8)ProdEsPolicy繼承EsPolicy,在構造方法中實例化esPolicyHandler接口屬性

public class ProdEsPolicy extends EsPolicy {
    public ProdEsPolicy() {
        esPolicyHandler = new ProdEsPolicyHandler();
    }
}

9)測試

public class EsPolicyTest {
    public static void main(String[] args) {
        BbEsPolicy bbEsPolicy = new BbEsPolicy();
        bbEsPolicy.esPolicyHandler();
        SpcEsPolicy spcEsPolicy = new SpcEsPolicy();
        spcEsPolicy.esPolicyHandler();
        ProdEsPolicy prodEsPolicy = new ProdEsPolicy();
        prodEsPolicy.esPolicyHandler();
    }
}

10)執(zhí)行結果

===處理基帶板節(jié)能策略===
===Spc節(jié)能策略處理===
===產(chǎn)品節(jié)能策略處理===

4.策略模式的注意事項和細節(jié)

1)策略模式的關鍵是:分析項目中變化部分與不變部分

2)策略模式的核心思想是:多用組合/聚合,少用繼承;用行為類組合,而不是行為的繼承,更有彈性;

3)體現(xiàn)了“對修改關閉,對擴展開放”原則,客戶端增加行為而不用修改原有的代碼,只要添加一種策略(或者行為)即可,避免了使用多重轉移語句(if…else if…else)

4)提供了可以替換繼承關系的辦法:策略模式將算法封裝在獨立的Strategy類中使得你可以獨立于其Context改變它,使它易于切換、易于理解、易于擴展

5)需要注意的是:每添加一個策略就要增加一個類,當策略過多是會導致類數(shù)量龐大

到此這篇關于Java設計模式之策略模式示例詳解的文章就介紹到這了,更多相關Java策略模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 學習Java HashMap,看這篇就夠了

    學習Java HashMap,看這篇就夠了

    這篇文章主要介紹了Java HashMap的相關資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • 詳解SpringMVC @RequestBody接收Json對象字符串

    詳解SpringMVC @RequestBody接收Json對象字符串

    這篇文章主要介紹了詳解SpringMVC @RequestBody接收Json對象字符串,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • SpringBoot中支持Https協(xié)議的實現(xiàn)

    SpringBoot中支持Https協(xié)議的實現(xiàn)

    本文主要介紹了SpringBoot中支持Https協(xié)議的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • 重學SpringBoot3之如何發(fā)送Email郵件功能

    重學SpringBoot3之如何發(fā)送Email郵件功能

    這篇文章主要給大家介紹了重學SpringBoot3之如何發(fā)送Email郵件功能的相關資料,文中包括環(huán)境準備、項目配置、代碼實現(xiàn)、最佳實踐和安全性建議,通過采用異步發(fā)送、重試機制、限流等最佳實踐,可以構建一個健壯的郵件發(fā)送系統(tǒng),需要的朋友可以參考下
    2024-11-11
  • java中@ModelAttribute注解的作用

    java中@ModelAttribute注解的作用

    本文主要介紹了java中@ModelAttribute注解的作用。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Java實現(xiàn)彈窗效果的基本操作(2)

    Java實現(xiàn)彈窗效果的基本操作(2)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)彈窗效果的基本操作第二篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java常見數(shù)據(jù)結構面試題(帶答案)

    Java常見數(shù)據(jù)結構面試題(帶答案)

    這篇文章主要介紹了Java常見數(shù)據(jù)結構面試題,帶有答案及解釋,希望對廣大的程序愛好者有所幫助,同時祝大家有一個好成績,需要的朋友可以參考下。
    2017-09-09
  • java獲取兩個數(shù)組中不同數(shù)據(jù)的方法

    java獲取兩個數(shù)組中不同數(shù)據(jù)的方法

    這篇文章主要介紹了java獲取兩個數(shù)組中不同數(shù)據(jù)的方法,實例分析了java操作數(shù)組的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • SpringBoot實現(xiàn)上傳文件到AWS S3的代碼

    SpringBoot實現(xiàn)上傳文件到AWS S3的代碼

    這篇文章主要介紹了SpringBoot實現(xiàn)上傳文件到AWS S3的代碼,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-10-10
  • JavaSE一維數(shù)組和二維數(shù)組用法詳解

    JavaSE一維數(shù)組和二維數(shù)組用法詳解

    數(shù)組存儲同一種數(shù)據(jù)類型多個元素的集合,既可以存儲基本數(shù)據(jù)類型,也可以存儲引用數(shù)據(jù)類型,這篇文章主要給大家介紹了關于JavaSE一維數(shù)組和二維數(shù)組用法的相關資料,需要的朋友可以參考下
    2024-04-04

最新評論

奉化市| 清徐县| 灯塔市| 鹤山市| 南康市| 买车| 姜堰市| 洛阳市| 伊宁市| 鹰潭市| 逊克县| 鲁甸县| 淳安县| 莱西市| 务川| 饶阳县| 甘泉县| 油尖旺区| 莱芜市| 崇文区| 五台县| 南江县| 雅江县| 山阴县| 十堰市| 厦门市| 河南省| 长兴县| 界首市| 收藏| 庆安县| 尼玛县| 彭州市| 南京市| 怀来县| 万源市| 高雄市| 太谷县| 宁海县| 镇坪县| 会同县|