我正在创建一个程序,其中我有一个名为“层次结构”的对象,它只是一个包含字符串(ArrayList<ArrayList<String>>
)和适当的getter的列表列表。
用户应该能够选择这些层次结构的表示/格式 - 例如层次结构[1,2,3,4]在写入文件之前是否应表示为{1,2,3,4}或(1-4)或其他任何内容。
是否有一种聪明/标准的方法来进行这种数据和格式分离?我正在考虑创建一个“FormattedHierarchy”对象,它只包含一个Hierarchy-object和一个Formatting-object,但我不知道这是不是一个好的设计选择。
感谢您提供任何指示/提示/答案。
答案 0 :(得分: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) {
//...
}
}
这称为strategy design pattern。如果某些代码需要格式化您的层次结构,只需传递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() {
//...
}
}
每次创建格式化程序时,都会将层次结构类封装在其中。
答案 1 :(得分:2)
您可以将其作为模型视图模式进行处理。您的模型是包含实际数据的模型:ArrayList<ArrayList<String>>
,视图是进行格式化的模式,以各种方式显示数据。那就是格式化类。
答案 2 :(得分:1)
您可以添加类似于标准toString()
方法的方法,例如toArrayString()
将对象格式化为{1,2,3,4}或toIntervalString()
,将其格式化为(1-4)......