策略模式:封裝了一系列的算法,用戶不直接與這些算法打交道,獨立於使用用戶而變化
策略模式的三個組成條件:
1.抽象的策略角色
2.具體的策略角色
3.環境角色,持有一個策略角色的引用,爲用戶服務的類
下面演示一個Demo:
1.抽象的策略角色
public interface Strategy {
public void print();
}
2.幾個實現了這個接口的類
public class StrategyA implements Strategy{
@Override
public void print() {
System.out.println("StrategyA");
}
}
public class StrategyB implements Strategy{
@Override
public void print() {
System.out.println("StrategyB");
}
}
public class StrategyC implements Strategy{
@Override
public void print() {
System.out.println("StrategyC");
}
}
3.環境角色Context,給用戶調用的
public class Context {
Strategy strategy;
public Context() {
}
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void contextPrint() {
strategy.print();
}
}
4.StartUp
public class StartUp {
public static void main(String[] args) {
Context context;
context = new Context(new StrategyA());
context.contextPrint();
context = new Context(new StrategyB());
context.contextPrint();
context = new Context(new StrategyC());
context.contextPrint();
}
}
策略模式的優點是將算法分開來,獨立開來,如果有新的算法要加入的話可以新建一個策略,去繼承那個抽象的策略類,這樣就減少了很多的代碼量,確定點是用戶必須知道你有那樣算法才能去調用那個算法,這樣的用戶體驗不咋的。