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

  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);
    }
}
相关推荐
bug攻城狮2 分钟前
SpringBoot 脚手架搭建指南:从零构建企业级开发框架
java·spring boot·后端·架构·系统架构·设计规范
问水っ5 分钟前
Qt Creator快速入门 第三版 第四章 布局管理
开发语言·qt·学习
格林威6 分钟前
工业相机图像高速存储(C++版):直接IO存储方法,附Basler相机实战代码!
开发语言·c++·人工智能·数码相机·计算机视觉·视觉检测·工业相机
wind5206 分钟前
差分包技术
开发语言·node.js·安装·web app·openclaw·龙虾
人道领域6 分钟前
【苍穹外卖】深度解析:商品浏览四大核心接口设计(附完整数据流转图)
java·数据库·后端·sql
灰阳阳8 分钟前
Docker-镜像-命令清单
java·docker·eureka
青衫码上行8 分钟前
【项目开发日记 | 根据业务流程产出前后端交互文档】第二天
java·团队开发
JuneXcy8 分钟前
node(2)
开发语言·前端·javascript·http·node.js
m0_716667079 分钟前
嵌入式C++驱动开发
开发语言·c++·算法
代码探秘者9 分钟前
【Spring框架】彻底理解 Spring 单例线程安全
java·安全·spring