Java,工厂模式用于动态样式类?

时间:2015-11-03 11:38:53

标签: java design-patterns

我有一个库/ android模块,提供某些自定义ui类。 (PanelView,GridView,TextView ...)所有这些类都是可设置的。样式从文本文件解析为JSONObjects,在StyleManager中组织,然后从中检索并转换为样式对象。第一个想法就像是

public class PanelView_Styling{
    public static PanelView_Styling createFromJSON(JSONObject data){...}
}

但是我不能使用包含创建方法的Styling接口。 (在Java 8之前的接口中没有静态方法。)
下一个选择是工厂

public class StylingFactory{
    public static Styling createStylingFromJSON(int stylingType, JSONObject data){
    switch( stylingType ){
        case 0: 
            /* get and validate attributes from data */
            /* return null or new Styling instance filled with the attributes */ 
        break; 
    }
}

int typecheck只是一个例子。它可以是类引用,枚举,甚至是样式数据的属性或不同的东西 但这种方法的主要问题是,我不能在不改变工厂的情况下添加新的样式。当我在另一个内部使用ui模块时,我会在某个时刻有ExtendedPanelViewExtendedPanelView_Styling。 Styling将拥有自己的参数验证逻辑,因此我不能只使用反射并将JSON中的所有内容复制到样式中。

我认为抽象工厂可能是一个解决方案。我会在lib中有一个基本的ui元素和样式的具体工厂。然后我必须在每个具有额外UI元素和样式的模块中实现自定义工厂。然后在一个实例下组合具体工厂的实例,并以某种方式确定哪个工厂能够创建哪种类型的样式。 (也许只是调用它们中的每一个直到一个返回一个对象,或者它们都失败了) 但这似乎相当复杂。对这个问题有更简单,更直接的方法吗?

0 个答案:

没有答案