用于设置大量成员变量的java Design模式

时间:2017-05-18 11:25:35

标签: java design-patterns

最近我遇到了一个面试问题。

  

问题:假设你有很多值(比如20多个)   你需要在对象中设置。现在使用setter或设置这些值   使用构造函数是一项繁琐的任务。

您将使用什么Java设计模式来解决此问题

帮助我了解解决方案的人。

3 个答案:

答案 0 :(得分:0)

嗯,最后这些属性不知何故,但有些模式可能会帮助你减少聊天。快速wikipedia search for creational patterns根据具体情况显示一些可能的拟合:

  • 例如,工厂和工厂方法可以将属性作为参数。
  • 构建器通常可以更轻松地构建符合当前需求的对象。
  • 当您想要重复创建类型的类似实例时,原型可能会有所帮助。

要真正决定,您需要了解确切的情况和需求。

答案 1 :(得分:0)

标准建设者:

public class Account {

  private final String userId;
  private final String token;

  public Account(String userId, String token) {
    this.userId = userId;
    this.token = token;
  }

  public String getUserId() {
    return userId;
  }

  public String getToken() {
    return token;
  }

  public static class Builder {

    private String userId;
    private String token;

    public Builder setUserId(String userId) {
        this.userId = userId;

        return this;
    }

    public Builder setToken(String token) {
        this.token = token;

        return this;
    }

    public Account build() {
        return new Account(userId, token);
    }

  }

}

答案 2 :(得分:0)

如果值是高度动态的,那么拥有Map<String, Object>(对于基于索引的访问可能是List<Object>)和诸如public Double getDoubleByName(String nameKey)(以及与之对应的索引,例如public String getStringAt(int index))? 编辑: 如果您对Map实现感兴趣,该实现还提供了一种高效的方式(即: O(log2(n))),通过像List这样的元素索引来访问元素,则您可以尝试使用my repo上的我自己的MapTreeAVL和类似的代码

MapTreeAVL<String, Object> m = MapTreeAVL.newMap(MapTreeAVL.Optimizations.ToQueueFIFOIterating, String::compareTo);
....
Object o = m.getAt(7);