代码之家  ›  专栏  ›  技术社区  ›  Buhake Sindi Tesnep

代码设计模式结构

  •  2
  • Buhake Sindi Tesnep  · 技术社区  · 16 年前

    我有一个迪莱姆娜,我已经想了一会儿了,但还没弄明白怎么做 有效地 和 高效 对它进行编码(设计)。

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

    基于这三种格式,我必须创建对象(比如A、B、C、D、E)。我想用一个构建器模式来生成这些对象,所以我的接口构建器是:

    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 回复  |  直到 16 年前
        1
  •  2
  •   Ami    16 年前

    我不能百分之百地确定我知道你需要什么,但是我想到的第一个设计模式是 Strategy

    有了这个简单而优雅的模式,您可以为您所拥有的每个实现(XML、JSON、Atom)实现一个具体的策略,并且您还拥有一个灵活的解决方案,可以在将来轻松地扩展,以支持新的格式,而不破坏任何现有的代码(这是开放-关闭原则)。

    所以,你会有一个 Factory method 这将提供一个“build”/“get”方法,该方法的输入将是一个表示所需格式的枚举(只是一个示例,您可以以任何方式实现),而factory方法将使用一个策略来实际构建对象。这样,客户机100%不知道对象是如何构建的,甚至不需要知道它是什么格式。

    祝你好运!

    推荐文章