小工具知识网

当前位置: 首页 > 行业知识 > 设计模式之策略模式

行业知识

设计模式之策略模式

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();    }}

工作中遇到场景

订阅视频平台事件(异常振动,蒸汽泄露,未带安全帽…),每个类型的事件对应一个处理类(策略类),后续可能还会订阅其他的事件.

上一篇:方舟云游戏怎么服务器直连?

下一篇:【Python】一文详细介绍 pkl格式 文件