行业知识
设计模式之策略模式
2026-11-08 15:05:09
来源:互联网转载
策略模式(Strategy Pattern)
定义
定义一���列算法,封装每个算法,并使它们可以互换。
使用场景
主要角色
类图
示例代码
//抽象策略角色public interface Strategy { //策略模式的运算法则 void doSomething();} //具体策略角色public class ConcreteStrategy1 implements Strategy { @Override public void doSomething() { System.out.println("具体策略1的运算法则..."); }} //具体策略角色public class ConcreteStrategy2 implements Strategy { @Override public void doSomething() { System.out.println("具体策略2的运算法则..."); }} //封装角色public class Context { //抽象策略 private Strategy strategy; //构造函数设置具体策略 public Context(Strategy strategy) { this.strategy = strategy; } //封装后的策略方法 public void doAnything() { this.strategy.doSomething(); }} public class Client { public static void main(String[] args) { //拿到一个具体的策略 Strategy strategy = new ConcreteStrategy1(); //创建上下文对象 Context context = new Context(strategy); //执行封装后的方法 context.doAnything(); }} 使用Spring实现策略模式+工厂模式
public interface Strategy { //策略模式的运算法则 void doSomething();} @Component("concreteStrategy1")public class ConcreteStrategy1 implements Strategy { @Override public void doSomething() { System.out.println("具体策略1的运算法则..."); }} @Component("concreteStrategy2")public class ConcreteStrategy2 implements Strategy { @Override public void doSomething() { System.out.println("具体策略2的运算法则..."); }} @Component("defaultStrategy")public class DefaultStrategy implements Strategy { @Override public void doSomething() { System.out.println("默认策略的运算法则..."); }} @Componentpublic class StrategyFactory { //Spring会自动将Strategy接口的实现类注入到这个Map中,key为bean id,value值则为对应的策略实现类 @Autowired private Map strategyMap; public Strategy getStrategy(String strategyName) { return strategyMap.get(strategyName); }} @SpringBootTestclass SpringbootDemoApplicationTests { @Autowired private StrategyFactory strategyFactory; @Test public void test() { strategyFactory.getStrategy("concreteStrategy1").doSomething(); strategyFactory.getStrategy("concreteStrategy2").doSomething(); }} 工作中遇到场景
订阅视频平台事件(异常振动,蒸汽泄露,未带安全帽…),每个类型的事件对应一个处理类(策略类),后续可能还会订阅其他的事件.
上一篇:方舟云游戏怎么服务器直连?