建造者模式及应用

建造者模式

建造者模式即:Director指挥builder去根据需要的材料去创建成品(product),立刻奉上几个典型应用场景,体会体会。
eg1:StringBuilder

StringBuilder builder = new StringBuilder();
        builder.append("")
                .insert(0,"1")
                .append("");

eg2:分页查询

// 给5个属性的QueryPaginationResponse实例
QueryPaginationResponse response = new QueryPaginationResponse.Builder(1).setCount(100)
    .setCurrent(1).setTotal(2).setPageSize(50).setList(new ArrayList<>()).build();

eg3:java调用es的api查询

QueryBuilder query = QueryBuilders.termQuery("_id", "-1");
        SearchResponse response = client.prepareSearch("testBuilder").setQuery(query).setFrom(0).setSize(10).get();

具体的理论分析和代码演示,请参阅大神博客深入理解建造者模式 ——组装复杂的实例

应用实例具体演示:

1 对于前端请求后端返回,请求结果,或保存或修改或查询或删除或异常信息提示,统统能用,不管返回对象如何创建,需要什么就返回什么。
2 ResponseData对象构建,通过链式结构,支持多种请求下、异常情况下的后台信息反馈回前端,也是一个好用的后台结果封装工具类

public class ResponseData {


    private final String message;
    private final int code;
    private final Map<String, Object> body = new HashMap<>();

    public String getMessage() {
        return message;
    }

    public int getCode() {
        return code;
    }

    public Map<String, Object> getBody() {
        return body;
    }

    public ResponseData putDataValue(String key, Object value) {
        body.put(key, value);
        return this;
    }

    private ResponseData(int code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * TODO 方法说明。
     * [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
     * @return
     */
    public static ResponseData ok() {
        return new ResponseData(200, "OK");
    }

    /**
     * TODO 方法说明。
     * [POST/PUT/PATCH]:用户新建或修改数据成功。
     * @return
     */
    public static ResponseData createdOrUpdate() {
        return new ResponseData(201, "CREATED");
    }

    /**
     * TODO 方法说明。
     * [*]:表示一个请求已经进入后台排队(异步任务)
     * @return
     */
    public static ResponseData acceptedRequest() {
        return new ResponseData(202, "Accepted");
    }

    /**
     * TODO 方法说明。
     * [DELETE]:用户删除数据成功。
     * @return
     */
    public static ResponseData deleteOk() {
        return new ResponseData(204, "NO CONTENT");
    }

    /**
     * TODO 方法说明。
     * 未授权访问,表示用户没有权限(令牌、用户名、密码错误)
     * @return
     */
    public static ResponseData unauthorized() {
        return new ResponseData(401, "未授权访问!");
    }

    /**
     * TODO 方法说明。
     * 越权访问,没有修改资源的访问权限
     * @return
     */
    public static ResponseData outOfBounds() {
        return new ResponseData(403, "您没有改资源的访问权限!");
    }


    /**
     * TODO 方法说明。
     * 没有找到对象
     * @return
     */
    public static ResponseData notFound() {
        return new ResponseData(404, "not found");
    }

    /**
     * TODO 方法说明。
     * 没有找到对象
     * @return
     */
    public static ResponseData failed() {
        return new ResponseData(500, "failed");
    }

    /**
     * TODO 方法说明。
     * 方法错误
     * @return
     */
    public static ResponseData serverInternalError() {
        return new ResponseData(500, "Server Internal Error");
    }

    public static void setResponse(HttpServletResponse response){
        response.setContentType("application/json;charset=UTF-8");
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("access-control-allow-methods", "POST, GET,HEAD, OPTIONS,PATCH, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization");
        response.setHeader("access-control-allow-credentials", "true");
    }
}

3 使用示例:

ResponseData.failed().putDataValue("message", "获取用户好友列表失败!");
ResponseData.ok().putDataValue("data", "userId");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值