信息发布→ 登录 注册 退出

Java中常用的设计模式之建造者模式详解

发布时间:2026-01-11

点击量:
目录
  • 优点
  • 缺点
  • 使用场景
    • 一、实现方式
    • 二、实现方式
      • 1、引入依赖
      • 2、实现
    • 三、测试
    • 总结

      优点

      1.建造者独立,易扩展。

      2.便于控制细节风险。

      缺点

      1.产品必须有共同点,范围有限制。

      2.如内部变化复杂,会有很多的建造类。

      使用场景

      1.需要生成的对象具有复杂的内部结构。

      2.需要生成的对象内部属性本身相互依赖。

      一、实现方式

      package com.asurplus.common.builder.style1;
      public class UserInfo {
          private String name;
          private int age;
          /**
           * 创建一个新的建造者
           *
           * @return
           */
          public static UserInfoBuilder builder() {
              return new UserInfoBuilder();
          }
          public String getName() {
              return name;
          }
          public void setName(String name) {
              this.name = name;
          }
          public int getAge() {
              return age;
          }
          public void setAge(int age) {
              this.age = age;
          }
      	@Override
          public String toString() {
              return "UserInfo{" +
                      "name='" + name +
                      ", age=" + age +
                      '}';
          }
          /**
           * 建造者内部类
           */
          public static class UserInfoBuilder {
              private String name;
              private int age;
              public UserInfoBuilder name(String name) {
                  this.name = name;
                  return this;
              }
              public UserInfoBuilder age(int age) {
                  this.age = age;
                  return this;
              }
              /**
               * 创建一个新的实例对象并赋值
               *
               * @return
               */
              public UserInfo build() {
                  UserInfo userInfo = new UserInfo();
                  userInfo.setName(this.name);
                  userInfo.setAge(this.age);
                  return userInfo;
              }
          }
      }
      

      我们定义了一个 UserInfo 类,有 name,age 两个属性,还定义了一个静态内部类 UserInfoBuilder,帮助我们建造 UserInfo,并提供链式调用的方法。

      二、实现方式

      1、引入依赖

      <!-- lombok插件 -->
      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <optional>true</optional>
      </dependency>
      

      Lombok 需要在 IDEA 中安装插件,具体方法,请百度。

      2、实现

      package com.asurplus.common.builder.style2;
      import lombok.Builder;
      import lombok.Data;
      /**
       * get set toString 方法注解
       */
      @Data
      /**
       * 建造者模式注解
       */
      @Builder
      public class UserInfo2 {
          private String name;
          private int age;
      }
      

      基于 Lombok 的注解,我们省略了大部分代码,但是具体的实现方式和我们的方式一是一模一样的,调用方法也是一样的。

      三、测试

      package com.asurplus.common.builder;
      import com.asurplus.common.builder.style1.UserInfo;
      import com.asurplus.common.builder.style2.UserInfo2;
      /**
       * 建造者模式
       */
      public class TestMain {
          public static void main(String[] args) {
              // 手写的方式
              UserInfo userInfo = UserInfo.builder().name("张三").age(20).build();
              System.out.println(userInfo);
              // 注解的方式
              UserInfo2 userInfo2 = UserInfo2.builder().name("李四").age(30).build();
              System.out.println(userInfo2);
          }
      }
      

      输出结果

      总结

      本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!   

      在线客服
      服务热线

      服务热线

      4008888355

      微信咨询
      二维码
      返回顶部
      ×二维码

      截屏,微信识别二维码

      打开微信

      微信号已复制,请打开微信添加咨询详情!