首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可变复杂类的设计及其在java中的构造

可变复杂类的设计及其在java中的构造
EN

Stack Overflow用户
提问于 2013-02-09 15:30:14
回答 1查看 268关注 0票数 0

我正在设计一个复杂的配置类,作为API设计的一部分。配置类大致如下所示。(我忽略了泛型/访问修饰符等)

代码语言:javascript
复制
class Configuration {
    One obj1;
    Two obj2;
}

class One {
      List<Double> values;
}

class Two {
      double value;
      Map<String, Double> data;
}

这就是我想要完成的:

  • 我希望用户能够轻松地在第一次创建这个配置类并提交到服务器。
  • 然后,他们可以更改该类的任何部分,并将更新的配置发送到服务器。

使用和避免什么设计模式?

使这个类不可变并使用构建器模式更好吗?或者,只需在配置类上提供各种修改方法,这样它们就可以就地修改相同的配置类(在所有级别),而不必为每次更新创建一个新的配置类。我认为Builder模式只适用于不可变类。

问题:

  • 有任何方法可以利用Builder模式来解决这种情况吗?
  • 还是像我前面提到的那样在配置类上提供mutator方法更好呢?
  • 或者还有其他更好的模式可用吗?
EN

回答 1

Stack Overflow用户

发布于 2013-02-18 12:07:14

我认为您应该使用原型模式:在您的代码中,您可以添加包含所有类型配置的映射,映射将有一个名为"currentConfiguration“的键,其值将是应该加载的配置。该映射还可以包含可以存储在映射中的其他配置,并可以在需要时替换当前配置。一旦从地图中获取配置,您只需克隆配置对象,用户就可以随心所欲地这样做。更改之后,他可以使用speicifc名称在映射中保存配置。因此,用户可以获得非常接近他所需要的配置对象,并相应地配置它。代码应该如下所示:‘`public class CloudRepository {

代码语言:javascript
复制
private Map<String, Configuration> rep;

public CloudRepository(Configuration current){
    rep = new HashMap<String, Configuration>();
    rep.put("current", current);
}

public Configuration getConfiguration(String string){
    return (Configuration) rep.get(string).clone();
}

public void addConfiguration(String name, Configuration conf){
    rep.put(name, conf);
}

public void replaceCurrentConfiguration(Configuration conf){
    rep.put("current", conf);
}

}

您还可以编写更多代码来处理配置的历史记录。您也可以考虑让这个类是单例的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14789619

复制
相关文章

相似问题

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