Spring boot 策略模式 - 详解

public abstract class Node {      /**     * 执行     *     * @param a     * @param b     * @return     */    public abstract Integer execute(int a, int b);}
package my.node; import org.springframework.stereotype.Component;  @Component("exec")public class ExecNode extends Node {    @Override    public Integer execute(int a, int b) {        return a + b;    }}
package my.node; import org.springframework.stereotype.Component;  @Component("todo")public class TodoNode extends Node {    @Override    public Integer execute(int a, int b) {        return a + b;    }}

工厂

package my; import my.node.Node;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component; import java.util.Map;import java.util.Optional; @Componentpublic class NodeFactory {     /**     * Spring会自动将Strategy接口的实现类注入到这个Map中,key为bean id,value值则为对应的策略实现类     */    @Autowired    private Map nodeMap;     /**     * 获取相应的节点     *     * @param nodeName     * @return     */    public Node getNode(String nodeName) {        Node targetNode = Optional.ofNullable(nodeMap.get(nodeName))                .orElseThrow(() -> new IllegalArgumentException("Invalid Operator"));         return targetNode;    }}

使用

package my; import my.node.Node;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.test.context.web.WebAppConfiguration;  @RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = MyApplication.class)@WebAppConfigurationpublic class CommandFactoryTest {    @Autowired    private NodeFactory nodeFactory;     @Test    public void execute() throws Exception {         Node node = nodeFactory.getNode("exec");    }  }

posted @ 2025-07-21 08:54  yjbjingcha  阅读(12)  评论(0)    收藏  举报