天天看點

政策模式政策模式介紹類圖代碼實作總結

政策模式介紹

概述

所謂政策,指的是一個類的行為或其算法可以在運作時更改.

就像出行選擇的交通工具,要根據自己的情況,可以自由切換自行車,汽車,火車等等.

三個角色

環境Context 持有政策strategy的引用,通過引用來調用某ConcreteStrategy定義的算法。

抽象政策Strategy 定義所有支援的算法的公共接口

具體政策ConcreteStrategy 實作的政策類

類圖

政策模式政策模式介紹類圖代碼實作總結

代碼實作

1.抽象政策接口

public interface Strategy {
    
    public void travel();

}

           

具體政策的實作

public class BikeStrategy implements Strategy{

    @Override
    public void travel() {
        // TODO Auto-generated method stub
        System.out.println("we can travel by bike");

    }

}
           
public class BusStrategy implements Strategy{

    @Override
    public void travel() {
        // TODO Auto-generated method stub
        System.out.println("we can travel by Bus");

    }

}

           
public class CarStrategy implements Strategy{

    @Override
    public void travel() {
        // TODO Auto-generated method stub
        System.out.println("we can travel by Car");
    }

}

           

3.政策持有者和執行者

public class Context {
       private Strategy strategy;

       public Context(Strategy strategy){
          this.strategy = strategy;
       }

    public void executeStrategy(){
           strategy.travel();
       }

}

           

4.測試

public class Test {
    
    /**
     * 建構的過程放在用戶端,用戶端根據自己的需求 ,自己選擇不同的政策
     * @param args
     */
    public static void main(String[] args) {
        System.out.println("===========我選擇政策一==========");
        Strategy strategy=new CarStrategy();
        Context context =new Context(strategy);
        context.executeStrategy();
        System.out.println("===========我選擇政策二==========");
        Strategy strategy1=new BikeStrategy();
        Context context1 =new Context(strategy1);
        context1.executeStrategy();
        System.out.println("===========我選擇政策三==========");
        Strategy strategy3=new BusStrategy();
        Context context3 =new Context(strategy3);
        context3.executeStrategy();

    }

}

           

5.測試結果

===========我選擇政策一==========
we can travel by Car
===========我選擇政策二==========
we can travel by bike
===========我選擇政策三==========
we can travel by Bus

           

總結

寫法類似于狀态模式,但思想卻不像狀态模式.

政策模式注重于,采用何種政策,去解決問題.政策建構的過程放在用戶端,用戶端根據自己的需求 ,自己選擇不同的政策

狀态模式則注重于,切換狀态,以及優雅的切換狀态中的動作.狀态建構的過程放在Context中,用戶端隻需要執行不同的動作即可.

但是話又說回來,'if else'可以用政策模式和狀态模式代替

其實這都使用了面向對象的多态的特性==>子類的對象可以指向父類的引用,允許不同類的對象對同一消息作出響應.

繼續閱讀