Builder模式,链式编程

Builder模式

  • Builder模式也称为建造者模式
  • StringBuilder、lombok @Builder 大家应该都不陌生,在对象初始化属性时,使用链式编程可以省去调用大量的setter方法,代码可读性更高。那么链式编程是如何实现的,以下Demo展示了主要的实现过程。
一、定义Builder接口,使用泛型增加代码扩展性
public interface Builder<T> {
    T build();
}
二、定义Bean
public class Person {
    private String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    private Person(PersonBuilder builder) {
        this.id = builder.id;
        this.name = builder.name;
    }

    public static PersonBuilder builder() {
        return new PersonBuilder();
    }

    public static class PersonBuilder implements Builder<Person> {
        private String id;
        private String name;
        public PersonBuilder id(String id) {
            this.id = id;
            return this;
        }
        public PersonBuilder name(String name) {
            this.name = name;
            return this;
        }

        @Override
        public Person build() {
            return new Person(this);
        }
    }
}
三、测试类
public class TestBuilder {
    public static void main(String[] args) {
        Person person1 = Person.builder().id("100001").name("李四").build();
        System.out.println(Optional.ofNullable(person1).map(Person::getId).orElse("100002"));
        System.out.println(Optional.ofNullable(person1).map(Person::getName).orElse("张三"));

        Person person2 = Person.builder().id("100001").build();
        System.out.println(Optional.ofNullable(person2).map(Person::getId).orElse("100002"));
        System.out.println(Optional.ofNullable(person2).map(Person::getName).orElse("张三"));
    }
}

优点:

  • 链式调用,优雅、清晰、一目了然;
  • 一行代码完成对象创建,避免了多行代码赋值过程出错;
  • 省去了大量冗余变量,避免变量复制出错;

缺点:

  • 需要冗余的 Builder 类,以及大量相等重复的成员变量,大大增加了代码量,维护难度相对较大;
  • 只适合一次赋值创建对象,多次赋值的场景还需要新增 set 方法配合,不是很灵活

即使团队不允许使用lombok,这种编码风格也是值得推荐的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值