无论是构造器(可以使用javaBean模式)、构建器、静态工厂方法,都是为创建类的对象而存在的
1.构造器(javaBean模式)
构造器不用多说了
public class xx{
public xx(){...}
public xx(int x){...}
}
JavaBean模式就是现实使用无参构造器创建对象,通过get、set方法(主要通过setter方法设置参数)
public class MyjavaBean{
private int number=0;
public MyjavaBean(){}
public void setNumber(int val){number=val;}
}
MyjavaBean myjavabean=new MyjavaBean();
myjavabean.setNumber(100);
优点:无需参数全部都设值,参数都可变
缺点:类无法设成不可变,构造过程中由于javabean参数不同可能导致调用方法出错
2.静态工厂方法
类提供一个公有的静态工厂方法来返回类的实例
class Test{
private int number;
public static Test newInstance(int number1){
Test test=new Test();
test.number=number1;
return test;
}
}
优点:适合数据构造都是私有的,只通过静态工厂方法来访问控制实例
缺点:构造器无法子类化
3.构建器(Builder)
结合javabean和重叠构造器的优点,有不可变可能、也有javabean的可变设置
public class Test{
private final int a;
private final int b;
private final int c;
private final int d;
public static class Builder{
private final int a;//必要(不可变)
private final int b;
private int c;//可变
private int d;
public Builder(int a,int b){
this.a=a;
this.b=b;
}
public Builder c(int val){c=val; return this; }
public Builder d(int val){d=val; return this; }
public Test build(){
return new Test(this);
}
}
private Test(Builder builder){
a=builder.a;
b=builder.b;
c=builder.c;
d=builder.d;
}
}
int aa=1,bb=1,cc=1,dd=1;
Test test=new Test.Builder(aa,bb).c(cc).d(dd).build();
构建器适用于多参数,由于该模式下代码其实较为冗长,不适合简单的,反而比较适合较为复杂,同时参数较多的(一般四个以上)情况。