1.模式定义:
策略模式(Strategy),定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换
策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
2.应用场景
1、策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
2、假如系统中有很多类,而他们的区别仅仅在于他们的行为不同。
3、一个系统需要动态地在几种算法中选择一种。
3.类图
4.实例
抽象策略
public abstract class AbstractStrategy {
/**
*抽象方法sayHello
*/
public abstract void sayHello();
}
具体策略
public class ChinaStrategy extends AbstractStrategy {
@Override
public void sayHello() {
System.out.println("I am a chinese people...");
}
}
具体策略
public class UsaStrategy extends AbstractStrategy {
@Override
public void sayHello() {
System.out.println("I am a USA people...");
}
}
contextStrategy上下文
public class StrategyContext {
/**
* 抽象策略对象
*/
private AbstractStrategy strategy;
public void setStrategy(AbstractStrategy strategy){
this.strategy=strategy;
}
public void sayHello(){
strategy.sayHello();
}
}
测试代码
@Test
public void testStrategy(){
StrategyContext strategyContext=new StrategyContext();
//chinese people
AbstractStrategy chinaStrategy=new ChinaStrategy();
strategyContext.setStrategy(chinaStrategy);
chinaStrategy.sayHello();
System.out.println("=============");
//usa people
AbstractStrategy usaStrategy=new UsaStrategy();
strategyContext.setStrategy(usaStrategy);
usaStrategy.sayHello();
}