序言
吐槽:翻译的真是。。。。。
举例说明这个现象。
我们声明一个 Facts
的一个类,根据不同的需求来创建不同的构造参数,这种模式称之为重叠构造器。简而言之,重叠构造器虽然可行,但是参数一旦多了起来,简直是噩梦啊。。。
public class Facts {
private String a;
private String b;
private String c;
public Facts(String a) {
this.a = a;
}
public Facts(String a, String b) {
this.a = a;
this.b = b;
}
public Facts(String a, String b, String c) {
this.a = a;
this.b = b;
this.c = c;
}
}
JavaBean模式
这里呢懒省事,使用 LomBok
来生成get set
@Data
public class Facts {
private String a;
private String b;
private String c;
public static void main(String[] args) {
Facts facts = new Facts();
facts.setA("1");
facts.setB("2");
}
}
这样子呢看似也没毛病。但是呢有一点需要注意,这种方式创建的对象,如果有多个线程去访问,那么你一肯定是要付出额外的努力来确保他是线程安全的。那么还有啥好办法吗
构建器模式(Builder)
废话不多说看代码
public class Facts {
private String a;
private String b;
private String c;
public static Facts.FactsBuilder builder() {
return new Facts.FactsBuilder();
}
public static class FactsBuilder {
private String a;
private String b;
private String c;
FactsBuilder() {
}
public Facts.FactsBuilder a(String a) {
this.a = a;
return this;
}
public Facts.FactsBuilder b(String b) {
this.b = b;
return this;
}
public Facts.FactsBuilder c(String c) {
this.c = c;
return this;
}
public Facts build() {
return new Facts(this.a, this.b, this.c);
}
}
public static void main(String[] args) {
Facts build = Facts.builder().a("1").b("2").build();
}
}
Builder模式可以自选参数,十分灵活,并且这样构建可以不用担心线程问题的。
如果类的构造器或者静态工厂中具有多个参数,设计这种类的时候,Builder也许是你的不二选择。
当然如果受够了去写这些静态内部类,可以使用 lombok
来生成哟~~~
@Builder
public class Facts {
private String a;
private String b;
private String c;
public static void main(String[] args) {
Facts build = Facts.builder().a("1").b("2").build();
}
}