代码设计模式结构

时间:2010-09-15 11:38:12

标签: java design-patterns

我有一个困难,需要我一直在思考,但仍然没有弄清楚如何有效有效代码(设计)它。 / p>

我有对象数据以3种基于文本的格式返回:JSON,XML,ATOM。在JSON中,数据可以是JSON对象或JSON数组。 XML和ATOM是xml。

基于这3种格式,我必须创建对象(比方说A,B,C,D,E)。我想过使用Builder Pattern来生成这些对象,所以我的界面构建器是:

public interface Builder<T, E, A> { //Where E = Element, A is Element array, this is useful for JSON
   public T create(E element);
   public T[] create(A array);
}

public class ABuilder implements Builder<A, JSON, JSONArray> {
  public A create(JSON json) {...}
  public A[] create(JSONArray array) {...}
}

问题是我想创建一个动态工厂/替代设计模式,可以根据格式创建一个对象....

即。我想要一个功能,我可以做

public class Resource {

   public A getA(String formatString) {
      return new Something().createA(formatString); //or something better....
   }
}

您有什么更好的方法可以解决这个问题吗?请记住,所有这些都基于3种可能的格式。目标是根据格式动态生成对象,而不必担心格式结构。

1 个答案:

答案 0 :(得分:2)

我不是百分百肯定我明白你需要什么,但我想到的第一个设计模式是Strategy

通过这种简单而优雅的模式,您可以为您拥有的每个实现(xml,json,atom)实现具体的策略,并且您还有一个灵活的解决方案,可以在将来轻松扩展以支持新格式而不会破坏任何现有代码(即开放式原则)。

所以,你会得到一个Factory method来提供一个“Build”/“Get”方法,该输入将是一个代表所需格式的枚举(只是一个例子,你可以用任何你想要的方式实现),并且该工厂方法将使用策略来实际构建对象。这样,客户端100%不知道对象是如何构建的,甚至不知道它是什么格式。

祝你好运!