策略模式非常簡單,也不再舉例子了,它其實就是根據clinet選擇的不同,執行不同的代碼,避免了if....else 和switch case 的不方便和耦合。
甚至說你可能平常經常用,只是不知道這是策略模式。
類圖
對於擁有公共接口的First,Second,Third,給Clinet提供一個類Context 去執行不同的IStrategy的子類(算法)。
public interface IStrategy {
public void operate();
}
public class First implements IStrategy {
@Override
public void operate() {
System.out.println("1");
}
}
public class Second implements IStrategy {
@Override
public void operate() {
System.out.println("2");
}
}
public class Third implements IStrategy {
@Override
public void operate() {
System.out.println("3");
}
}
public class Context {
IStrategy strategy;
public Context(IStrategy strategy) {
this.strategy = strategy;
}
public void operate(){
strategy.operate();
}
}
public class Clinet {
public static void main(String[] args) {
Context context ;
context = new Context(new First());
context.operate();
context = new Context(new Second());
context.operate();
context = new Context(new Third());
context.operate();
}
}
運行結果:
1
2
3