本文转发自技术世界,原文链接
http://www.jasongj.com/design_pattern/strategy/
策略模式定义
策略模式(Strategy Pattern),将各种算法封装到具体的类中,作为一个抽象策略类的子类,使得它们可以互换。客户端可以自行决定使用哪种算法。
策略模式类图
典型策略模式实现
策略接口,定义策略执行接口
public interface Strategy {
void strategy(String input);
}
具体策略类,实现策略接口,提供具体算法
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@com.jasongj.annotation.Strategy(name="StrategyA")
public class ConcreteStrategyA implements Strategy {
private static final Logger LOG = LoggerFactory.getLogger(ConcreteStrategyB.class);
@Override
public void strategy(String input) {
LOG.info("Strategy A for input : {}", input);
}
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@com.jasongj.annotation.Strategy(name="StrategyB")
public class ConcreteStrategyB implements Strategy {
private static final Logger LOG = LoggerFactory.getLogger(ConcreteStrategyB.class);
@Override
public void strategy(String input) {
LOG.info("Strategy B for input : {}", input);
}
}
Context类,持有具体策略类的实例,负责调用具体算法
public class SimpleContext {
private Strategy strategy;
public SimpleContext(Strategy strategy) {
this.strategy = strategy;
}
public void action(String input) {
strategy.strategy(input);
}
}
客户端可以实例化具体策略类,并传给Context类,通过Context统一调用具体算法
public class SimpleClient {
public static void main(String[] args) {
Strategy strategy = new ConcreteStrategyA();
SimpleContext context = new SimpleContext(strategy);
context.action("Hellow, world");
}
}