我有 25 个字段的实体。它没有任何逻辑,只是存储值。它是用抽象构建器构建的。我不希望在构建后更改此实体。我想让所有字段最终化,但我不想制作 25-params 构造函数。在这种情况下我应该使用什么模式?现在我考虑包本地设置器,但它比语法检查最终字段中的所有值设置更糟糕。我无法将此字段打包为 2-3 个对象
问问题
446 次
2 回答
9
我看到三个主要选项:
有一个只有构建器知道的私有类,以及一个只有 getter 的公共接口。构建器使用接口而不是类给出引用。
有两个类,一个是可变的(有点像信使类),另一个是不可变的,它在其构造函数中接受可变的类并获取其字段。
让类对所有字段都有合理的默认值,然后让设置器返回具有该字段集的类的新实例。这里的缺点是要构建一个 25 字段的实例,您最终会创建大约 24 个一次性对象,具体取决于您需要更改多少合理的默认值。;-)
于 2013-09-17T17:25:09.817 回答
8
将Builder
班级作为static
班级中的嵌套Entity
班级。然后Builder
该类可以直接设置字段,并且您不需要 setter 方法或n -arg 构造函数Entity
。
public class Entity
{
// Just one attribute and getter here; could be 25.
private int data;
public int getData() { return data; }
public static class Builder
{
// Just one attribute and getter here; could be 25.
private int theData;
public Entity build()
{
Entity entity = new Entity();
// Set private field(s) here.
entity.data = theData;
return entity;
}
public Builder setData(int someData)
{
theData = someData;
return this;
}
}
}
用法:
Entity entity = new Entity.Builder().setData(42).build();
于 2013-09-17T17:34:13.773 回答