mis*_*hka 4 java oop design-patterns
我有25个字段的实体.它没有任何逻辑,只是存储值.它是用抽象构建器构建的.我不想在构建之后改变这个实体.我想让所有领域都是最终的,但我不想制作25-params构造函数.在这种情况下我应该使用什么模式?现在我考虑包本地setter,但它比最终字段中所有值设置的语法检查更糟糕.我无法将这些字段打包在2-3个对象中
我看到三个主要选择:
只有构建器知道的私有类,以及只有getter的公共接口.构建器使用接口而不是类来提供引用.
有两个类,一个是可变的(这是一个信使类)和一个不可变的类,它在构造函数中接受可变的一个并抓取它的字段.
让类具有所有字段的合理默认值,然后让setter返回具有该字段集的类的新实例.这里的缺点是,要构建一个25字段的实例,最终会创建~24个一次性对象,具体取决于您需要更改多少合理的默认值.;-)
将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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
Entity entity = new Entity.Builder().setData(42).build();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
315 次 |
| 最近记录: |