一:策略模式定義(compator接口比較):
定義一組算法,將每一個算法封裝起來,並且它們之間可以互換
二:策略模式特點:
缺點是調用者需要知道所有的策略,才能準確的調用。優點是一旦知道了具體的策略之後,可以自由的切換。主要由抽象策略角色,具體策略角色,策略上下文角色和測試類四部分組成。策略上下文將抽象策略角色通過構造函數的形式注入,這樣在測試的時候就可以接收指定的任何具體策略角色。
三:策略模式實現:
抽象的策略角色:
public interface IStrategy {
public void algorithmMethod();
}
具體的策略角色:
public class ConcreteStrategy implements IStrategy {
@Override
public void algorithmMethod() {
System.out.println("具體的策略實現");
}
}
策略上下文角色:策略上下文和被封裝的策略類不用是同一個接口,若是同一個接口則就是靜態代理模式
private IStrategy iStrategy;
public StrategyContext(IStrategy iStrategy) {
this.iStrategy = iStrategy;
}
// 調用策略接口的方法
public void ContextMethod() {
//這裏也可以添加策略自定義的邏輯
this.iStrategy.algorithmMethod();
}
}
測試類:
public class StrategyTest {
public static void main(String[] args) throws InterruptedException {
// 策略上下文擁有一個真正的策略角色
StrategyContext strategyContext = new StrategyContext(
new ConcreteStrategy1());
// 策略上下文調用的方法實質是調用具體策略角色的方法
strategyContext.ContextMethod();
}