码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式

时间:2021-06-02 13:14:08      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:maps   back   exception   abs   oid   super   validator   ext   nal   

1、定义一个执行器抽象类

 

public abstract class AbstractExecutor<T> {

    /**
     * 执行业务逻辑
     */
    public void doExecute(T t) {
        try {
            // 初始化
            this.init(t);

            // 执行逻辑
            this.process(t);
        } finally {

            // 使用结束移除
            this.finish();
        }
    }

    /**
     * 处理过程
     * @param t 处理参数
     */
    protected abstract void process(T t);

    /**
     * 初始化
     * @param t 处理参数
     */
    protected abstract void init(T t);

    /**
     * 结束
     */
    protected abstract void finish();
}

 

2、业务执行器抽象类SaveAbstractExecutor继承该抽象类AbstractExecutor,定义业务自有的方法

public class SaveAbstractExecutor extends AbstractExecutor<SaveParam> {

    protected static ThreadLocal<Entity> threadLocal = new ThreadLocal<>();

    @Override
    protected void process(SaveParam saveParam) {

        log.info("保存入参:{}", JSONObject.toJSONString(saveParam));

    }

    @Override
    protected void init(EvaluationSaveParam param) {
        

    }

  
/** * 保存 * * @param param 入参 * @return */ protected void save(SaveParam param) {

}protected void checkParam(SaveParam param) { Validator.getInstance().notNull(param.getRate()); } @Override protected void finish() { evaluationThreadLocal.remove(); } }

 

3、创建业务执行器的工厂

public class SaveExecutorRegister {

    /**
     * 执行器容器
     */
    private final static Map<EventEnum, SaveAbstractExecutor> EXECUTOR_MAP = Maps.newHashMap();

    /**
     * 注册
     *
     * @param eventEnum 事件
     * @param executor 执行器
     */
    public static void register(EventEnum eventEnum, saveAbstractExecutor executor) {
        EXECUTOR_MAP.put(eventEnum, executor);
    }

    /**
     * 查找执行器
     *
     * @param eventEnum 评论事件
     * @return 返回执行器
     */
    public static saveAbstractExecutor findByType(EventEnum eventEnum) {
        return EXECUTOR_MAP.get(eventEnum);
    }
}

4、具体执行器ExampleExecutor继承SaveAbstractExecutor,重写process方法

public class ExampleExecutor extends SaveAbstractExecutor{

    public ExampleExecutor() {
        SaveExecutorRegister.register(EventEnum.EXAMPLE, this);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    protected void process(SaveParam param) {

        super.process(param);

        super.checkParam(param);

       
    }
}

5、代码调用执行

SaveExecutorRegister.findByType(eventEnum).doExecute(param);

 

策略模式

标签:maps   back   exception   abs   oid   super   validator   ext   nal   

原文地址:https://www.cnblogs.com/jijiecong/p/14818297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!