/**
* 策略模式
*/
public class Main
{
public static void main(String[] args) {
Context ctx = new Context(new StrategyA());
ctx.doMethod();
ctx = new Context(new StrategyB());
ctx.doMethod();
ctx = new Context(new StrategyC());
ctx.doMethod();
}
}
public interface Strategy {
void method();
}
public class StrategyA implements Strategy{
@Override
public void method() {
System.out.println("this is StrategyA");
}
}
public class StrategyB implements Strategy{
@Override
public void method() {
System.out.println("this is StrategyB");
}
}
public class StrategyC implements Strategy{
@Override
public void method() {
System.out.println("this is StrategyC");
}
}
public class Context {
Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public Strategy getStrategy() {
return strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void doMethod() {
strategy.method();
}
}
问题:
如果一个程序用多个算法实现,想根据实际情况传入算法进行数据处理,这种情况如何将算法独立出来?
用法:
这个问题是接口使用的典型技巧,将接口作为参数,把实现了这个接口的对象传入,这个就是很典型的函数参数为行为,而不是某个对象或者值。
类似的场景比如缓存的设置,可以用内存当缓存,还可以用redis当缓存,缓存的操作接口都是一样的,只是策略不一样,所以叫做策略模式。