0

什么时候使用如下构建器模式有意义:

private static final Foo FOO1 = Foo.Builder().setX(...).setY(...).setZ(...).build();
private static final Foo FOO2 = Foo.Builder().setX(...).setY(...).setZ(...).build();
private static final Foo FOO3 = Foo.Builder().setX(...).setY(...).setZ(...).build();
... x100 ...

VS类似的东西

public class MyFoos {
  public static class Foo1 implements Foo {
    public String getX() {...}
    public String getY() {...}
    public String getZ() {...}
  }

  public static class Foo2 implements Foo {
    public String getX() {...}
    public String getY() {...}
    public String getZ() {...}
  }

  public static class Foo3 implements Foo {
    public String getX() {...}
    public String getY() {...}
    public String getZ() {...}
  }
  ... x100...
}

Foo 有多复杂有关系吗?例如,假设我们使用了 Foo.Builder(),我们可能需要调用类似:

Foo.Builder().setSpecialFunction(new Function() {...})

其中 Function 类似于http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Function.html

这是否表明 Builder 模式在这种情况下不合适?如果没有,什么会更可取?谢谢!

4

1 回答 1

1

第二个设计选择很糟糕——不要滥用继承。构建器模式(根据 Bloch 的“Effective Java”)适用于构造函数中的参数数量超过某个常数(例如,根据 Bloch 的 4 个)时使用。

于 2012-07-11T13:45:54.833 回答