首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构建具有多个字段的语义不变实体

如何构建具有多个字段的语义不变实体
EN

Stack Overflow用户
提问于 2013-09-17 17:21:14
回答 2查看 503关注 0票数 5

我有有25个字段的实体。它没有任何逻辑,只是存储价值。它是用抽象的构建器构建的。我不想在建造后改变这个实体。我想使所有字段都是最终的,但我不希望使25-params构造函数。在这种情况下我应该使用什么模式?现在我想到了包本地设置程序,但它比最后字段中所有值设置的语法检查更糟糕。我不能将这些字段打包到2-3个对象中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-17 17:25:09

我认为有三个主要选择:

  1. 拥有一个只有构建器才知道的私有类,以及一个只包含getter的公共接口。构建器使用接口而不是类提供引用。
  2. 有两个类,一个是可变的(有点像信使类),另一个是不可变的,它在构造函数中接受可变的一个,并获取它的字段。
  3. 使类对所有字段都有合理的默认值,然后有setters返回具有该字段集的类的新实例。这里的缺点是,要构建一个25字段实例,您最终创建了大约24个丢弃对象,这取决于您需要更改的合理默认值的多少。;-)
票数 9
EN

Stack Overflow用户

发布于 2013-09-17 17:34:13

Builder类作为static嵌套类放在Entity类中。然后,Builder类可以直接设置字段,您不需要在Entity中使用setter方法或need构造函数。

代码语言:javascript
复制
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;
      }
   }
}

用法:

代码语言:javascript
复制
Entity entity = new Entity.Builder().setData(42).build();
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18856059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档