什么是策略模式?為什么要使用策略?
從開始學(xué)習(xí)java編程,我們就學(xué)習(xí)了if...else...,針對(duì)不同的條件執(zhí)行不同的邏輯。對(duì)于一些簡單的邏輯還好,如果有十多種條件,寫長篇幅的if...else...就會(huì)很low,策略模式可以優(yōu)雅的替換掉大篇幅的if...else...代碼塊,針對(duì)不同的條件執(zhí)行不同的策略。
策略模式簡單實(shí)現(xiàn)
// 定義策略接口
public interface Strategy {
/**
* 策略方法
*/
void method();
}
實(shí)現(xiàn)不同策略
@Service(value = "strategyA")
public class StrategyA implements Strategy {
/**
* 策略方法
*/
@Override
public void method() {
System.out.println("我是A策略實(shí)現(xiàn)方案!");
}
}
@Service(value = "strategyB")
public class StrategyB implements Strategy {
/**
* 策略方法
*/
@Override
public void method() {
System.out.println("我是B策略實(shí)現(xiàn)方案!");
}
@Service(value = "strategyC")
public class StrategyC implements Strategy {
/**
* 策略方法
*/
@Override
public void method() {
System.out.println("我是C策略實(shí)現(xiàn)方案!");
}
}
// 定義策略上下文
@Component
public class StrategyContext {
private final Map<String, Strategy> map = new HashMap<>();
@Resource
private ApplicationContext context;
@Constructor
public void initContext() {
Map<String, Strategy> beanMap = context.getBeansOfType(Strategy.class);
beanMap.forEach(this.map::put);
}
public void invoke(String key, Object arg...) {
pageMap.get(key).method(arg...);
}
}