策略模式+模版模式+工厂模式

  1. 抽象类
java 复制代码
/**
 * 策略模式:不同类型选择不同的实现策略
 * */
public interface AbstractStrategy {

    /**
     * 模版模式:不同策略实现同一接口的共性部分(公共方法)
     * */
    default void commentMeth(){
        System.out.println("模版方法");
    }

    void handle(Object object);
}

2.抽象的实现

java 复制代码
@Service
public class AchieveOneStrategy implements AbstractStrategy{
    @Override
    public void handle(Object obj) {

    }
}
java 复制代码
@Service
public class AchieveTwoStrategy implements AbstractStrategy{
    @Override
    public void handle(Object object) {

    }
}
java 复制代码
@Service
public class AchieveThreeStrategy implements AbstractStrategy{
    @Override
    public void handle(Object object) {

    }
}

3.枚举

java 复制代码
public enum StrategyTypeEnum {
    ONE_STRATEGY(0,AchieveOneStrategy.class),
    TWO_STRATEGY(1,AchieveTwoStrategy.class),
    THREE_STRATEGY(2,AchieveThreeStrategy.class),
    ;

    Integer type;
    Class<? extends AbstractStrategy> aClass;
    StrategyTypeEnum(Integer type, Class<? extends AbstractStrategy> aClass){
        this.type = type;
        this.aClass = aClass;
    }
}

4.工厂

java 复制代码
/**
 * 工厂模式:根据不同类型创建不同实例
 * */
@Service
public class StrategyFactory {

    @Autowired
    private ApplicationContext applicationContext;

    static HashMap<Integer, Class<? extends AbstractStrategy>> strategyHashMap = new HashMap<>();

    static {
        for (StrategyTypeEnum value : StrategyTypeEnum.values()) {
            strategyHashMap.put(value.type, value.aClass);
        }
    }
    public AbstractStrategy executeStrategy(Integer flag){
        Class<? extends AbstractStrategy> aClass = strategyHashMap.get(flag);
        return applicationContext.getBean(aClass);
    }
}
相关推荐
磊磊落落18 分钟前
如何将 Spring Statemachine 作为一个轻量级工作流引擎来使用?
java
兆子龙14 小时前
ahooks useRequest 深度解析:一个 Hook 搞定所有请求
java·javascript
兆子龙14 小时前
React Suspense 从入门到实战:让异步加载更优雅
java·javascript
咕白m62516 小时前
Java 实现 Excel 转 HTML:完整示例
java
RealPluto17 小时前
Spring AOP 失效排查
java·spring
码路飞18 小时前
热榜全是 OpenClaw,但我用 50 行 Python 就造了个桌面 AI Agent 🤖
java·javascript
Nyarlathotep011318 小时前
LinkedList源码分析
java·后端
用户83071968408218 小时前
Java 告别繁琐数据统计代码!MySQL 8 窗口函数真香
java·sql·mysql
带刺的坐椅18 小时前
SolonCode v0.0.20 发布 - 编程智能体(新增子代理和浏览器能力)
java·ai·agent·solon·solon-ai·claude-code·openclaw