package com.stu;
/*
*
* 对于实体对象中, 参数很多的时候, 创建对象,
*
* 方法A. 通过编写多个构造器,调用的时候,看选择调用构造器叠代的形式,构造器里面
* 再去调用构造器的形式来进行。
*
* 方法B: javaBean的形式来处理,但是参数多的话,代码行数会增加,都是set/get这样
* 同时在多线程异步执行的时候导致奇怪的错误。
*
*
* 构建器的形式创建对象, 对于对象参数比较多的时候, 创建对象形式,可读性和代码性都强,同时最后是通过无参的构造器来返回
* 对象。 同时构造器直接私有化。 (对于框架的基类这个还是不要私有化)
*
* 同时如果,我们再框架使用的时候, 可以加入泛型的形式, 通过 Student<T extends BaseClass>,抽象一个类出来也是可以的。
*
*
* **/
public class Student {
// 必选
private String name;
private String className;
// 选参
private String address;
private int age;
private String hobby;
public static class Builder implements IBuilder<Student>{
// 必选
private String name;
private String className;
// 选参
private String address;
private int age;
private String hobby;
public Builder(String name,String className){
this.name = name;
this.className = className;
}
public Builder setAddress(String address){
this.address = address;
return this;
}
public Builder setAge(int age){
this.age = age;
return this;
}
public Builder setHobby(String hobby){
this.hobby = hobby;
return this;
}
@Override
public Student builder() {
return new Student(this);
}
}
// 直接构造器私有化了。
private Student(Builder builder){
name = builder.name;
className = builder.className;
address = builder.address;
age = builder.age;
hobby = builder.hobby;
}
}
public class Main {
public static void main(String[] args) {
Student stu = new Student.Builder("小强", "三年二班").setAge(18).builder();
System.out.println(stu);
}
}