策略模式非常简单,也不再举例子了,它其实就是根据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