4

我正在创建一个程序,其中有一个名为“层次结构”的对象,它只不过是一个带有字符串(ArrayList<ArrayList<String>>)和适当吸气剂的列表的列表。

用户应该能够选择这些层次结构的表示/格式 - 例如,层次结构 [1,2,3,4] 是否应该表示为 {1,2,3,4} 或 (1-4) 或其他,在写入文件之前。

有没有一种聪明/标准的方法来进行这种数据和格式的分离?我正在考虑创建一个“FormattedHierarchy”对象,它仅由一个层次结构对象和一个格式化对象组成,但我不知道这是否是一个好的设计选择。

感谢任何指针/提示/答案。

4

3 回答 3

6

您可以做的最糟糕的事情是将层次结构数据表示与格式相结合。层次结构类不应该对格式化一无所知我的建议是创建一个HierarchyFormatter具有多个不同实现的单独接口。

我认为代码值千言万语:

public interface HierarchyFormatter {
    String format(Hierarchy hierarchy);
}

public class BraceFormatter implements HierarchyFormatter {
    public String format(Hierarchy hierarchy) {
        //...
    }
}

public class RangeFormatter implements HierarchyFormatter {
    public String format(Hierarchy hierarchy) {
        //...
    }
}

这称为策略设计模式。如果某些代码需要格式化您的层次结构,只需传递一个实例HierarchyFormatter- 任何实例。

如果您想用某种格式永久绑定层次结构,请使您的格式化程序有状态:

public abstract class HierarchyFormatter {
    protected final Hierarchy hierarchy;

    public HierarchyFormatter(Hierarchy hierarchy) {
        this.hierarchy = hierarchy;
    }

    public abstract String format();
}

public class BraceFormatter extends HierarchyFormatter {
    public String format() {
        //...
    }
}

public class RangeFormatter extends HierarchyFormatter {
    public String format() {
        //...
    }
}

每次创建格式化程序时,都将层次结构类封装在其中。

于 2012-08-19T13:10:14.943 回答
2

您可以将其作为模型视图模式来处理。您的模型是包含实际数据的模型:ArrayList<ArrayList<String>>视图进行格式化的模型,以各种方式呈现数据。这就是 Formatting 类。

于 2012-08-19T13:11:03.633 回答
1

您可以添加类似于标准toString()方法的方法,例如toArrayString()将对象格式化为 {1,2,3,4} 或toIntervalString()将其格式化为 (1-4) ...

于 2012-08-19T13:10:09.560 回答