对于策略模式的各种定义以及UML图我就不给出了,网上千篇一律。下面有一个自己写的小demo分享一下
1.定义策略接口
package com.leke.springsecurity.design.stratety;
/**
* @classname StrInt
* @description
* @date 2020/5/21 10:30
* @created by weiwensi
*/
public interface Strategy {
public void doStr();
}
2.定义两个策略策略A,策略B
package com.leke.springsecurity.design.stratety;
/**
* @classname AStr
* @description
* @date 2020/5/21 10:30
* @created by weiwensi
*/
public class AStr implements Strategy {
@Override
public void doStr() {
System.out.println("aaaa");
}
}
package com.leke.springsecurity.design.stratety;
/**
* @classname Bstr
* @description
* @date 2020/5/21 10:30
* @created by weiwensi
*/
public class Bstr implements Strategy{
@Override
public void doStr() {
System.out.println("bbbb");
}
}
3.定义一个Content维护接口的的真正传入策略,这个体现了Java多态,真正实例化的是哪个策略执行哪个策略
package com.leke.springsecurity.design.stratety;
import java.util.HashMap;
import java.util.Map;
/**
* @classname AppContent
* @description
* @date 2020/5/21 10:30
* @created by weiwensi
*/
public class AppContent {
public static void execute(Strategy strategy) {
strategy.doStr();
}
}
4.执行策略
这里维护了一个Map 使用Map存储了我们的策略,假设状态1为策略1,当前端传入状态值为1的时候执行策略1,类似下面的调用即可。
package com.leke.springsecurity.design.stratety;
import java.util.HashMap;
import java.util.Map;
/**
* @classname AppContent
* @description
* @date 2020/5/21 10:30
* @created by weiwensi
*/
public class AppContent {
public static void execute(Strategy strategy) {
strategy.doStr();
}
public static void main(String[] args) {
Map<Integer, Strategy> strategyMap = new HashMap<Integer, Strategy>() {{
put(1, new AStr());
put(2, new Bstr());
}};
execute(strategyMap.get(1));
}
}