序言
吐槽:翻译的真是。。。。。
举例说明这个现象。
我们声明一个 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
@Datapublic 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 来生成哟~~~
@Builderpublic 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();}}
