第一条:考虑用静态工厂方法代替构造器
优势1:方法可以命名清晰。一个类有多个构造函数的时候很难通过构造器来区分。
优势2:可以不用每次调用都创建新对象,可以使用缓存。
优势3:可以返回原类型的子类,隐藏具体实现的类,面向接口编程。
优势4:创建参数化类型实例,代码更简洁(。。。)
缺点1:无法子类化
缺点2:与其他静态方法无法区分,仅仅看api无法得知他可以获取实例。
第二条:遇到多个构造器参数时考虑用构建器
多个构造器参数如果使用javaBeans模式,把参数用setter方式注入,无法保证对象是不可变的。因此可以采用Builder模式。
public class A{
private int a,b,c,d,e;
public static class Builder{
private a,b,c,d,e;
public Builder(int a1,int b1){
a=a1;
b=b1;
}
public Builder setC(int c1){
c=c1;
return this;
}
...
public A build(){
return new A(this);
}
}
private A(Builder builder){
this.a=builder.a;
...
}
}
A classA = new A.Bilder(0,1).setC(4).build();