建造者模式: 一步一步建造一个对象;



文章目录

  • 建造者模式: 一步一步建造一个对象;
  • 前言
  • 一、建造者模式的作用
  • 二、如何实现建造者模式
  • 第一种: 改写set方法
  • 第二种: 直接使用lombok 的 @Builder
  • 总结



前言

建造者模式一般使用场景是: 一个复杂的对象创建过程,分步骤执行,一步一步完成创建,最终创建一个复杂的大对象;


一、建造者模式的作用

使复杂的大对象的创建,变为一步一步的属性的赋值,从而在创建上不那么复杂,使用建造者之后,代码也更佳统一简洁;

二、如何实现建造者模式

第一种: 改写set方法

具体类如下:

@ToString
public class PeopleBean {
    private String name;
    private String address;
    private Double height;
    private Double money;
    private Integer age;


    public String getName() {
        return name;
    }

    public PeopleBean setName(String name) {
        this.name = name;
        return this;
    }

    public String getAddress() {
        return address;
    }

    public PeopleBean setAddress(String address) {
        this.address = address;
        return this;
    }

    public Double getHeight() {
        return height;
    }

    public PeopleBean setHeight(Double height) {
        this.height = height;
        return this;
    }

    public Double getMoney() {
        return money;
    }

    public PeopleBean setMoney(Double money) {
        this.money = money;
        return this;
    }

    public Integer getAge() {
        return age;
    }

    public PeopleBean setAge(Integer age) {
        this.age = age;
        return this;
    }
}

@ToString lombok 的注解,仅仅是为了打印方便
一个对象新增所有属性的set/get方法之后,改写set方法为有返回值,返回为当前对象,然后 return this;
这样就相当于每次set 返回的都是当前对象,然后每个set仅仅是构造了对象的一个属性,或者一部分属性

搞个测试类,看下建造者模式的效果;

public class TestBuilder {

    public static void main(String[] args) {

        PeopleBean peopleBean = new PeopleBean()
                .setName("小明")
                .setAge(1)
                .setAddress("哈哈")
                .setHeight(1.45)
                .setMoney(100.00);

        System.out.println(peopleBean);
    }
}

一句话设计模式10:建造者模式_设计模式

第二种: 直接使用lombok 的 @Builder

之前的对象改为如下:

@ToString
@Builder
@Data
public class PeopleBean {
    private String name;
    private String address;
    private Double height;
    private Double money;
    private Integer age;
}

这里的@Builder 可以理解为之前改写set那种

直接测试,看结果

public class TestBuilder {

    public static void main(String[] args) {

        PeopleBean peopleBean = PeopleBean.builder()
                .name("小明")
                .age(1)
                .address("哈哈")
                .height(1.45)
                .money(100.00)
                .build();

        System.out.println(peopleBean);
    }
}

一句话设计模式10:建造者模式_set方法_02

总结

其实建造者模式,对于之前来说可能确实是个分步构建一个复杂对象的优秀方法,但是现在有了lombok,说实话我觉得这种设计模式已经名存实亡了;
除非真的是那种复杂的对象创建,且有业务逻辑,那确实需要自己去改写set方法,然后返回 this 那样去处理;