我覺得設計模式這東西,最好還是反覆看看書,推薦Head First我也是看這個的(https://pan.baidu.com/s/1x0aiZHEz_UMa_fKa8QNWbg ---- njh1)
嗯,不用謝。
標準的定義是:策略模式定義了算法族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化獨立於使用算法的客戶
簡單來講就是有好幾個算法,他就是用來決定使用哪一套的
類圖就醬紫啦
代碼如下:
package cn.bl.strategy;
/**
* @Deacription 使用策略
* @Author BarryLee
* @Date 2019/9/22 16:21
*/
public class Main {
public static void main(String[] args) {
Context context = new Context();
context.setStrategy(new ConcreteStrategyA());
context.algorithm();
context.setStrategy(new ConcreteStrategyB());
context.algorithm();
}
}
package cn.bl.strategy;
/**
* 策略接口
*/
public interface Strategy {
/**
* 策略方法
*/
void algorithm();
}
package cn.bl.strategy;
/**
* @Deacription 環境類
* @Author BarryLee
* @Date 2019/9/22 16:21
*/
public class Context {
// 策略是私有的
private Strategy strategy;
// 獲取策略方法
public Strategy getStrategy() {
return strategy;
}
// 設置策略
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
// 調用策略
public void algorithm() {
strategy.algorithm();
}
}
package cn.bl.strategy;
/**
* @Deacription 具體策略類A
* @Author BarryLee
* @Date 2019/9/22 16:21
*/
public class ConcreteStrategyA implements Strategy{
@Override
public void algorithm() {
System.out.println("strategy A");
}
}
package cn.bl.strategy;
/**
* @Deacription 具體策略類B
* @Author BarryLee
* @Date 2019/9/22 16:22
*/
public class ConcreteStrategyB implements Strategy{
@Override
public void algorithm() {
System.out.println("strategy B");
}
}