那么,一旦创建,您希望同时具有更易于阅读且不可变的对象吗?
我认为一个流畅的界面正确完成会帮助你。
它看起来像这样(纯粹是编造的例子):
final Foo immutable = FooFactory.create()
.whereRangeConstraintsAre(100,300)
.withColor(Color.BLUE)
.withArea(234)
.withInterspacing(12)
.build();
我用粗体写了“正确完成”,因为大多数Java程序员都弄错了流畅的接口,并用构建对象所需的方法污染了他们的对象,这当然是完全错误的。
诀窍是只有build()方法实际上创建了一个Foo(因此Foo可以是不可变的)。
FooFactory.create(),其中XXX(..)和withXXX(..)都创建了“其他东西”。
其他的东西可能是FooFactory,这里有一种方法可以做到这一点....
You FooFactory看起来像这样:
// Notice the private FooFactory constructor
private FooFactory() {
}
public static FooFactory create() {
return new FooFactory();
}
public FooFactory withColor( final Color col ) {
this.color = color;
return this;
}
public Foo build() {
return new FooImpl( color, and, all, the, other, parameters, go, here );
}