博客
关于我
java中的.builder()方法实现详解
阅读量:799 次
发布时间:2023-03-28

本文共 2750 字,大约阅读时间需要 9 分钟。

Java建造者模式的应用与优化

在软件开发中,当我们需要构建复杂对象时,传统的构造函数和setter方法往往会导致代码冗长,难以维护。而Java的建造者模式(Builder Pattern)为我们提供了一种更简洁高效的解决方案,避免了繁琐的构造过程。

一、简介

在实际项目中,我们经常需要创建具有多个属性的对象。传统的做法是使用构造函数或setter方法来设置属性值。然而,这种方式在参数多样、有默认值时会显得非常繁琐。例如,Result类的构造:

public class Result {
private int code;
private String message;
private T data;
public Result(int code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
// setter方法
public void setCode(int code) { ... }
public void setMessage(String message) { ... }
public void setData(T data) { ... }
}

使用方式也会因此变得繁琐:

// 方法一:全量构造函数
Result result1 = new Result(200, "success", null);
// 方法二:空构造函数加setter
Result result2 = new Result();
result2.setCode(200);
result2.setMessage("success");
result2.setData("");

这种方式的缺点在于:

  • 构造函数冗长:当只需要部分属性时,仍需定义全量构造函数。
  • setter方法冗长:每个属性都需要手动调用 setter方法。
  • 二、场景模拟

    考虑一个常见的Result类:

    public class Result
    {
    private int code;
    private String message;
    private T data;
    public Result(int code, String message, T data) {
    this.code = code;
    this.message = message;
    this.data = data;
    }
    // setter方法
    public void setCode(int code) { ... }
    public void setMessage(String message) { ... }
    public void setData(T data) { ... }
    }

    在实际使用中,这种方式的痛点显而易见:

  • 代码冗余:每次创建Result实例都需要调用多次setter方法。
  • 灵活性不足:无法根据实际需求灵活构建对象。
  • 三、Java实现

    为了解决上述问题,我们可以为Result类添加一个建造者类Builder:

    public static final class Builder
    {
    private int code;
    private String message;
    private T data;
    public Builder() {
    // 初始化所有属性为默认值
    }
    public Builder
    code(int val) {
    this.code = val;
    return this;
    }
    public Builder
    message(String val) {
    this.message = val;
    return this;
    }
    public Builder
    data(T val) {
    this.data = val;
    return this;
    }
    public Result
    build() {
    return new Result<>(code, message, data);
    }
    }

    使用方式变得更加简洁:

    Result
    result3 = new Result.Builder
    ()
    .code(404)
    .message("failure")
    .build();
    Result
    result4 = Result.newBuilder()
    .code(404)
    .message("failure")
    .build();

    四、Lombok优化

    为了进一步简化代码,可以使用Lombok的注解:

    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public class Result
    {
    private int code;
    private String message;
    private T data;
    }

    使用方式简化为:

    Result
    result5 = Result.builder()
    .code(404)
    .message("failure")
    .build();

    总结

    通过引入建造者模式,我们能够将对象的构建与其表示分离,简化了构造过程,使代码更加简洁易读。同时,结合Lombok的注解,可以进一步提升代码简洁性。在实际开发中,建造者模式广泛应用于需要灵活构造复杂对象的场景。

    转载地址:http://ddhfk.baihongyu.com/

    你可能感兴趣的文章
    nginx 后端获取真实ip
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
    查看>>
    Objective-C实现A-Star算法(附完整源码)
    查看>>
    Objective-C实现atoi函数功能(附完整源码)
    查看>>
    Objective-C实现base64加密和base64解密算法(附完整源码)
    查看>>
    Objective-C实现base85 编码算法(附完整源码)
    查看>>
    Objective-C实现basic graphs基本图算法(附完整源码)
    查看>>
    Objective-C实现BCC校验计算(附完整源码)
    查看>>
    Objective-C实现bead sort珠排序算法(附完整源码)
    查看>>
    Objective-C实现BeadSort珠排序算法(附完整源码)
    查看>>
    Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现BellmanFord贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现BF算法 (附完整源码)
    查看>>
    Objective-C实现binary exponentiation二进制幂运算算法(附完整源码)
    查看>>
    Objective-C实现binomial coefficient二项式系数算法(附完整源码)
    查看>>
    Objective-C实现check strong password检查密码强度算法(附完整源码)
    查看>>