这是一个非常有用的成语,我在读完《Effective Java》后一直在使用它。我一直在寻找C++中类似的东西,但几乎没有什么进展。GoF书中传统的构建器模式在我的情况下并不适用。因为这个对象只有一个非常复杂和混乱的构造函数。以下是Java的一个简单实现。
class ComplicatedObject {
private String field1;
private String field2;
private int field3;
private ComplicatedObject(Builder builder) {
this.field1 = builder.myField1;
this.field2 = builder.myField2;
this.field3 = builder.myField3;
}
public static class Builder {
private String myField1 = "some default";
private String myField2 = "some other default";
private int myField3 = -1;
public Builder() { }
public Builder field1(String val) {
this.myField1 = val;
return this;
}
public Builder field2(String val) {
this.myField2 = val;
return this;
}
public Builder field3(int val) {
this.myField3 = val;
return this;
}
public ComplicatedObject build() {
return new ComplicatedObject(this);
}
}
public static void main(final String[] args) {
//built like this
ComplicatedObject obj = new ComplicatedObject.Builder().field1("blah").field2("lol").field3(4).build();
}
}
Builder
类的方法的返回类型设置为引用即可)。 - Matteo ItaliaSomeClass s = new SomeClass(); s.setAttr1(..); s.setAttr2(..)
等基本适用于普通数据对象,但在面向对象中则是一种丑恶现象。 - Miserable Variable