栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java策略模式基本使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java策略模式基本使用

文章目录

前言一、使用步骤

1.定义出参结果类2.定义接口类3.规则统一处理逻辑类4.接口响应结果处理器类5.业务处理类(随业务扩展)

5.15.2 6.控制层 二.测试结果

1.参数为空2.业务处理1类3.业务处理2类4.输入不存在的接口 三.代码结构总结


前言

优点:可基于批量if else场景下优化代码;扩展性高
缺点:不兼容swagger在线接口文档


一、使用步骤 1.定义出参结果类
@Data
public class SendResult {

    public SendResult(Boolean result, String message) {
        this.result = result;
        this.message = message;
    }

    private Boolean result;
    private String message;
}
2.定义接口类
public interface OpenApi {

    
    boolean support(String uri);

    
    SendResult handle(String uri, Object[] result);
}
3.规则统一处理逻辑类
public abstract class AbstractOpenApi implements OpenApi {

    
    @Override
    public SendResult handle(String uri, Object[] result) {
        return getResult(uri, result);
    }

    
    public abstract SendResult getResult(String uri, Object[] result);
}
4.接口响应结果处理器类
@Slf4j
@Component(value = "OpenApiManger")
public class OpenApiManger implements OpenApi {


    @Resource
    private List abstractWs;

    
    @Override
    public boolean support(String uri) {
        //默认不支持
        return false;
    }

    
    @Override
    public SendResult handle(String uri, Object[] result) {

        getParam(uri, result);
        //校验uri是否合法
        for (AbstractOpenApi ws : abstractWs) {
            if (ws.support(uri)) {
                long s = System.currentTimeMillis();
                SendResult body = ws.handle(uri, result);
                long e = System.currentTimeMillis();
                log.info("完成请求--->uri[{}],请求内容[{}],请求耗时:{}ms", uri, result, (e - s));
                return body;
            }
        }
        return new SendResult(false, "不支持该接口");
    }


    
    public void getParam(String uri, Object[] result) {

        if (uri == null || result == null) {
            throw new ParamException("参数不能为空");
        }
    }
}
5.业务处理类(随业务扩展) 5.1
@Service
@Slf4j
public class ResultApi1 extends AbstractOpenApi {

    
    
    private final static String URI = "api1";

    
    @Override
    public SendResult getResult(String uri, Object[] result) {

        log.info("业务处理1类");
        
        JSonObject jsonObject = (JSONObject) JSONObject.parse(result[0].toString());

        return new SendResult(jsonObject.getBoolean("Statue"),
                jsonObject.getString("Messages"));
    }

    
    @Override
    public boolean support(String uri) {
        return URI.equals(uri);
    }
}
5.2
@Service
@Slf4j
public class ResultApi2 extends AbstractOpenApi {

    
    
    private final static String URI = "api2";

    
    @Override
    public SendResult getResult(String uri, Object[] result) {

        log.info("业务处理2类");
        
        JSonObject jsonObject = (JSONObject) JSONObject.parse(result[0].toString());

        return new SendResult(jsonObject.getBoolean("Statue"),
                jsonObject.getString("Messages"));
    }

    
    @Override
    public boolean support(String uri) {
        return URI.equals(uri);
    }
}
6.控制层
@RestController
public class TestController {

    @Resource
    private OpenApiManger openApiManger;

    @GetMapping("test")
    public SendResult test(String uri) {

        String message = "{"Statue":false,"Messages":"解析失败!"}";
        Object[] result = new String[]{message};
        return openApiManger.handle(uri, result);
    }
}
二.测试结果 1.参数为空

2.业务处理1类


3.业务处理2类


4.输入不存在的接口

三.代码结构


总结

完结

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769624.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号