构造者模式

构建者模式用于解决构造器参数过多导致的重载问题,提供了一种灵活的构造对象的方式。通过构建者模式,可以避免方法重载错误,并且能够重复利用Builder创建多个实例。使用Lombok库可以进一步简化Builder的实现,提供链式赋值和自动化的getter/setter方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

构建者模式 (Builder Pattern)

构建者模式的意义

实际上,在实际开发中,有时候Java构造器编写会有一个问题,由于JVM在编译期是通过方法名和参数类型以及个数来确定方法,当构造器的参数个数和类型都一致时,无法进行方法重载;

在这里插入图片描述

利用构造者模式解决

  • Builder设计模式最大的优势是可以随意组合构造器输入的参数,避免了重载出错的问题。
  • 另外同一个builder可以重复利用,buuld出多个实例对象。
public class Person {

    private String name;
    private int age;
    private String gender;

    private Person() {}
	
	// 继承Builder接口
    public static class PersonBuider implements Builder<Person> {

        String name;
        int age;
        String gender;

        public PersonBuider () {}

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

        public PersonBuider setAge (int age) {
            this.age = age;
            return this;
        }

        public PersonBuider setGender (String gender) {
            this.gender = gender;
            return this;
        }

        @Override
        public Person build() {
            Person person = new Person();
            person.name = this.name;
            person.age = this.age;
            person.gender = this.gender;
            return person;
        }
    }

    public static void main(String[] args) {
    	// 通过链式操作进行构造赋值,解决重载冲突问题
        Person person1 = new Person.PersonBuider().setName("XiaoMing").setAge(18).build();
        Person person2 = new Person.PersonBuider().setGender("Male").setAge(18).build();
    }
}

观察上面代码,我们在Main函数中实现了图片中的功能,解决了方法重载的问题

优雅的实现Builder

下面的代码等同于上面的PersonBuider代码

// 构造器类
@Builder
@Data
public class Person {

    private String name;
    private int age;
    private String gender;

}
------------------------------搞定------------------------------
// 测试代码类
public class PersonTest {

    public static void main(String[] args) {
        Person person = Person.builder().age(18).name("XiaoMing").build();
        System.out.println(person.getAge());
        System.out.println(person.getName());
    }
}

// print
18
XiaoMing

通过使用Lombok进一步代码简化,几行代码搞定我们的POJO常用的大部分功能,包括POJO构造器、链式赋值、get/set方法


Lombok该提供了更多好用的方法,想了解更多的Lombok——>
点击跳转:https://blog.youkuaiyun.com/wangjunjie0817/article/details/93598817

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值