封装功能或者算法,在运行时根据需要使用不同的策略
封装策略类:
/**
* 抽象算法接口
*/
interface Strategy {
void algorithmInterface();
}
/**
* 具体算法实现类
*/
@Log4j2
class ConcreteStrategyA implements Strategy {
@Override
public void algorithmInterface() {
log.info("算法A实现");
}
}
/**
* 具体算法实现类
*/
@Log4j2
class ConcreteStrategyB implements Strategy {
@Override
public void algorithmInterface() {
log.info("算法B实现");
}
}
使用策略的上下文:
@Setter
@AllArgsConstructor
class Context {
private Strategy strategy;
public void contextInterface() {
strategy.algorithmInterface();
}
}
动态切换策略:
Strategy strategyA = new ConcreteStrategyA();
Strategy strategyB = new ConcreteStrategyB();
Context context = new Context(strategyA);
context.contextInterface();
//替换算法
context.setStrategy(strategyB);
context.contextInterface();
策略模式适合于对一系列相似的行为进行封装,比如运算方式(加减乘除)、出行方式(自行车、火车、飞机)