定義
策略模式定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法獨立於使用算法的客戶。
角色
環境類(Context):用一個ConcreteStrategy對象來配置。維護一個對Strategy對象的引用。可定義一個接口來讓Strategy訪問它的數據。
抽象策略類(Strategy):定義所有支持的算法的公共接口。 Context使用這個接口來調用某ConcreteStrategy定義的算法。
具體策略類(ConcreteStrategy):以Strategy接口實現某具體算法。
類圖
示例
典型案例是一個人可以通過火車,自行車,飛機,汽車去旅行。一個接口多個實現。由客戶端決定調用哪個實現。
public interface IVehicles {
void transportWay();
}
public class VehiclesAirplane implements IVehicles {
public void transportWay(){
System.out.println("I travel use airplane.");
}
}
public class VehiclesBike implements IVehicles {
public void transportWay(){
System.out.println("I travel use bike.");
}
}
public class VehiclesCar implements IVehicles {
public void transportWay(){
System.out.println("I travel use car.");
}
}
public class Context {
public Context(){
}
private IVehicles vehicles;
public Context(IVehicles vehicles){
this.vehicles= vehicles;
}
public void way(){
vehicles.transportWay();
}
}
public class Client {
public static void main(String[] args) {
IVehicles vehicles = new VehiclesAirplane();
Context context = new Context(vehicles);
context.way();
}
}