1. 程式人生 > >設計模式最簡Demo:策略模式[Strategy Pattern]

設計模式最簡Demo:策略模式[Strategy Pattern]

1. 程式需求

在軟體開發中也常常遇到類似的情況,實現某一個功能有多種演算法或者策略,我們可以根據環境或者條件的不同選擇不同的演算法或者策略來完成該功能。在旅行系統開發中,我們需要為旅行者準備自行車、開車、火車等不同的策略,旅行者可以根據自身情況選擇不同策略。

2. UML

這裡寫圖片描述

3. Java 實現

Transportation

package strategy_pattern.travel;

public abstract class Transportation {
    public abstract void go();
}

TransByBike

package
strategy_pattern.travel; public class TransByBike extends Transportation { @Override public void go() { System.out.println("騎車去"); } }

TransByCar

package strategy_pattern.travel;

public class TransByCar extends Transportation {
    @Override
    public void go() {
        System.out.println("開車去"
); } }

TransByTrain

package strategy_pattern.travel;

public class TransByTrain extends Transportation {
    @Override
    public void go() {
        System.out.println("坐火車去");
    }
}

TravelContext

package strategy_pattern.travel;

public class TravelContext {
    public Transportation transportation = null
; public TravelContext(Transportation transportation) { this.transportation = transportation; } public void go(){ transportation.go(); } }

Test

package strategy_pattern.travel;

public class Test {
    public static void main(String[] args) {
        Transportation transportation = new TransByBike();
        TravelContext travel = new TravelContext(transportation);
        travel.go();
    }
}

4. 總結

策略模式有三個組成部分:

  • 環境類(Context):用一個ConcreteStrategy物件來配置。維護一個對Strategy物件的引用。可定義一個介面來讓Strategy訪問它的資料。
  • 抽象策略類(Strategy):定義所有支援的演算法的公共介面。 Context使用這個介面來呼叫某ConcreteStrategy定義的演算法。
  • 具體策略類(ConcreteStrategy):以Strategy介面實現某具體演算法。

策略模式是對演算法的封裝,它把演算法的責任和演算法本身分割開,委派給不同的物件管理。策略模式通常把一個系列的演算法封裝到一系列的策略類裡面,作為一個抽象策略類的子類。用一句話來說,就是“準備一組演算法,並將每一個演算法封裝起來,使得它們可以互換”。