设计模式-构建者(Builder)模式详解

前言

在创建一个对象的时候,你是否是酱紫写:

Student();
Student(String name);
Student(String name,int age);
Student(String name,int age,String address);
Student(String name,int age,String address,String id);

又或者是酱紫写:

Student stu = Student();
stu.setName("小明");
stu.setAge(18);

上面的写法虽然效率高,但是也有一些不足,对于代码后期维护和协同开发会是一件很痛苦的事情。

再看看别人是酱紫写的:

Student stu = new Student.Builder("小明")
  					     .setAge(22)
						 .setAddress("青岛")
  						 .build();
System.out.println(stu);

是不是很优雅,而且在很多框架中也能看到这样写的身影。没错这就是接下来要讲的构建者模式,这样好处是易于扩展和类的使用,但同时也失去了一些效率。

构建者模式
构建者模式实例代码也没啥好讲的,大家记住,照着写就行,代码如下:

public class Student {
    private final String name;
    private int age;
    private String address;

    private Student(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.address = builder.address;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getAddress() {
        return address;
    }


    public static class Builder {
    	//假设名字是必传,并且不会变,我们设置成final
        private final  String name ; 
        private int age ;
        private String address ;

        //对象中如果有必传参数,应该写在这个地方。
        public Builder(String name) {
            this.name = name;
        }

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

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

        public Student build() {
            return new Student(this);
        }
    }
}

使用方法如下:

Student student = new Student.Builder("小明") // 这个地方要传的参数往往都是必传参数。
							 .setAge(12)
							 .setAddress("青岛")
							 .build();

注意
Builder内部类中的属性要和Student中的相同。
如果Student中属性有final修饰,Builder对应的属性也需要用final修饰。
并且内部类中构造方法,传入必传属性

结尾

是不是看上去逼格瞬间上去了,非必传属性可以根据需要任意设置,非常灵活,而且这样先设置属性再创建对象,最终获取的对象一定是你预期的完整对象,不会像用之前set的方法创建的对象可能还没有设置完全。
有什么问题留言或者在我的微信公众号留言。
另外大家帮忙关注一下我的微信公众号,每天更新优质java知识,领取很多学习资料。
在这里插入图片描述
扫二维码关注公众号【Java程序员的奋斗路】可领取如下:
1.学习资料: 1T视频教程(大约有100多个视频):涵盖Javaweb前后端教学视频、机器学习/人工智能教学视频、Linux系统教程视频、雅思考试视频教程,android.等
2.项目源码:20个JavaWeb项目源码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序编织梦想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值