天天看點

設計模式之——政策模式一、基本介紹二、包含角色三、案例及UML類圖四、适用場景

一、基本介紹

政策模式:定義了一系列算法,并将每個算法封裝起來,讓它們之間可以互相替換,讓算法的變化獨立于使用算法的客戶。

二、包含角色

1.抽象政策類:定義了一個公共接口,各種不同的算法以不同的方式實作這個接口,環境角色使用這個接口調用不同的算法。

2.具體政策類:實作了抽象政策定義的接口,提供具體的算法實作。

3.環境類:持有一個政策類的引用,讓給用戶端調用。

三、案例及UML類圖

案例說明:

           旅遊方式有很多種,如窮遊、跟團遊,自駕遊,每一種旅遊方式的具體實作都不一樣。

UML類圖:

設計模式之——政策模式一、基本介紹二、包含角色三、案例及UML類圖四、适用場景

類TravelWay:

public interface TravelWay {

    /**
     * 旅遊
     */
    void travel();
}
           

說明:旅遊接口類,抽象政策類,定義公共接口。

類GroupTour:

public class GroupTour implements TravelWay {

    @Override
    public void travel() {
        System.out.println("跟團一起旅遊!");
    }
}
           

說明:跟團遊類,具體政策類,實作跟團遊的具體操作。

類PoorTravel:

public class PoorTravel implements TravelWay {

    @Override
    public void travel() {
        System.out.println("沒錢隻能窮遊!");
    }
}
           

說明:窮遊類,具體政策類,實作窮遊的具體操作。

類TravelContext:

public class TravelContext {

    private TravelWay travelWay;

    public TravelContext(TravelWay travelWay) {
        this.travelWay = travelWay;
    }

    public void travel() {
        travelWay.travel();
    }
}
           

說明:旅遊環境類,環境類,持有政策接口的引用,可根據不同的政策執行不同的旅遊操作。

類StrategyTest:

public class StrategyTest {

    public static void main(String[] args) {
        //跟團遊
        TravelWay travelWay = new GroupTour();
        TravelContext travelContext = new TravelContext(travelWay);
        travelContext.travel();
        //窮遊
        travelWay = new PoorTravel();
        travelContext = new TravelContext(travelWay);
        travelContext.travel();
    }
}
           

說明:測試及用戶端類。

四、适用場景

1.一個類定義了多種行為,并且這些行為在這個類的操作中以多個條件語句的形式出現,可将每個條件分支移入它們各自的政策類中以代替這些條件語句。(優化多重if else)

2.封裝同一類型操作的不同算法,對使用算法的客戶隐藏具體算法的實作細節。

3.針對同一類型問題的多種操作,僅僅是操作行為不同,并且将來可能會增加新的操作。

繼續閱讀