我有一个困境,需要我一直在想,但仍然没有想出如何有效地和有效代码(设计)它。代码设计模式结构
我有得到3基于文本的格式返回对象数据:JSON,XML,ATOM。在JSON中,数据可以是JSON对象或JSON数组。 XML和ATOM是xml。
基于上述3种格式,我要创建的对象(假设A,B,C,d,E)。我想有一个Builder模式来产生这些对象的,所以我Interface Builder的是:
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种可能的格式。目标是根据格式动态生成对象,而不必担心格式结构。
我认为同样的事情。我试图得到的是基于格式,例如的JSON策略,我可以潜在地获得一个JSON阵列(其开始和以'['和']'分别或JSON对象,其开始和结束与'分别一个'{'和'}结束时)。 XML本质上可以有一个数组或一个对象(由元素名称区分)。我认为建筑师对这种情况更好,但与战略一起使用时不会是最佳的。你得到我的漂移? – 2010-09-15 21:11:09
当您有一个复杂的构建对象的过程时,构建器模式很有用,有几种不同的实现。既然你没有描述你构建的对象的内部结构,我真的不知道它是否有用。我同意它也是一个有效的方向 - 你可以有具体的建造者为对象的每个部分是知道如何处理JSON,XML等\ – Ami 2010-09-16 12:42:19
无论您使用的策略或生成器最重要的事情是,你保持打开/关闭的原则,而且您的设计对于未来的变化非常灵活,并且也足够封装,以便外部组件在使用时不会受到影响。 – Ami 2010-09-16 12:43:12