静态工厂和构造器有个共同的局限性:它们都不能很好的扩展到大量的可选参数。这就是builder模式
比如java中一个类拥有多个标签的时候,使用构造器编写的时候,代码如下:
这个构造器调用通常需要许多你不需要的设置的参数,但还是不得不为它们传递值,一句话:重叠构造器模式可行,但是当有许多参数时,客户端代码会很难编写,并且仍然
难以阅读。
遗憾的是,javaBeans模式自身有着很严重的缺点。因为构造过程中被分到几个调用中,在构造过程中javabean可能处于不一致的状态。
幸运的是,还有第3种替代方法,既能保证重叠构造器模式那样的安全性,也能保证像javaBean模式那么好的可读性,这就是builder模式。
代码如下说明:
package com.mc.bsfram.others.entity; public class Person { private String name; private String address; private int age; private double salarry; private Person(Builder builder){ this.age=builder.age; this.address=builder.address; this.age=builder.age; this.salarry=builder.salarry; } //static的Builder类 public static class Builder{ //成员变量应该会被赋予初始值 private String name; private String address; private int age; private double salarry; public Builder(String name){ this.name=name;
return this; } public Builder address(String address){ this.address=address; return this; } public Builder age(int age){ this.age=age; return this; } public Builder salarry(double salarry){ this.salarry=salarry; return this; } public Person build(){ return new Person(this); } } }