首頁 > Java > java教程 > Java設計模式之策略模式實例分析

Java設計模式之策略模式實例分析

WBOY
發布: 2023-05-02 16:49:07
轉載
1404 人瀏覽過

1.基本介紹

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

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

#例如:針對環境節能,提出了三種節能方式:基頻板節能,SPC節能,產品節能,不同的節能方式,對環境設備的具體處理流程不同

2.傳統方式

(1)類別圖

Java設計模式之策略模式實例分析

##(2)編碼實作

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("===处理基带板节能策略===");
    }
}
登入後複製

3) SpcEsPolicy繼承EsPolicy,並複寫esPolicyHandler方法

public class SpcEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===Spc节能策略处理===");
    }
}
登入後複製

4)ProdEsPolicy繼承EsPolicy,並複寫esPolicyHandler方法

public class ProdEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===产品节能策略处理===");
    }
}
登入後複製

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();
    }
}
登入後複製

執行結果

#
public interface EsPolicyHandler {
    void esPolicyHandler();
}
登入後複製
執行結果


#

public class BbEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===基带板节能策略处理===");
    }
}
登入後複製

執行結果

#。
===處理基底帶板節能策略===

===Spc節能策略處理===

===產品節能策略處理===

##問題:傳統方法是透過子類別繼承父類別並複寫父類別方法來實現不同子類別的不同行為,對類別的局部改動,尤其是超類別的局部改動,會影響其它部分,會有溢出效應

3.採用策略模式

Java設計模式之策略模式實例分析(1)類別圖

#(2)編碼實作

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

public class SpcEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===Spc节能策略处理===");
    }
}
登入後複製

2)BbEsPolicyHandler實作策略接口,並實作esPolicyHandler方法

public class ProdEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===产品节能策略处理===");
    }
}
登入後複製

3)SpcEsPolicyHandler實作策略接口,並實作esPolicyHandler方法

public abstract class EsPolicy {
    EsPolicyHandler esPolicyHandler;
    public void setEsPolicyHandler(EsPolicyHandler esPolicyHandler) {
        this.esPolicyHandler = esPolicyHandler;
    }
    public void esPolicyHandler() {
        if (null != esPolicyHandler) {
            esPolicyHandler.esPolicyHandler();
        }
    }
}
登入後複製

4)Prodler實作策略接口,並實作esPolicyHandler方法

實作策略接口,並實作esPolicyHandler方法

public class BbEsPolicy extends EsPolicy {
    public BbEsPolicy() {
        esPolicyHandler = new BbEsPolicyHandler();
    }
}
登入後複製

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

public class SpcEsPolicy extends EsPolicy {
    public SpcEsPolicy() {
        esPolicyHandler = new SpcEsPolicyHandler();
    }
}
登入後複製

6)BbEsPolicy繼承EsPolicy,在建構方法中實例化esPolicyHandler介面屬性

public class ProdEsPolicy extends EsPolicy {
    public ProdEsPolicy() {
        esPolicyHandler = new ProdEsPolicyHandler();
    }
}
登入後複製

7)SpcEsPolicy繼承EsPolicy,在建構方法中實例化esPolicyHandler介面屬性

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();
    }
}
登入後複製

8)ProdEsPolicy繼承EsPolicy,在建構方法中實例化esPolicyHandler介面屬性##rrreee

#rrreee

9)測試
rrreee

10)執行結果

===處理基頻板節能策略===
===Spc節能策略處理===

===產品節能策略處理===

4.策略模式的注意事項與細節

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

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

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

4)提供了可以取代繼承關係的辦法:策略模式將演算法封裝在獨立的Strategy類別中使得你可以獨立於其Context改變它,使它易於切換、易於理解、易於擴展### ###5)要注意的是:每增加一個策略就要增加一個類,當策略過多是會導致類別數量龐大###

以上是Java設計模式之策略模式實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板