The*_*Cat 4 java object-oriented-analysis
我正在创建一个程序,其中我有称为"层次结构"的对象,它只是带有ArrayList<ArrayList<String>>带适当getter的strings()的列表列表.
用户应该能够选择这些层次结构的表示/格式 - 例如,层次结构[1,2,3,4]是否应该表示为{1,2,3,4}或(1-4)或其他,在将其写入文件之前.
是否有一种聪明/标准的方法来进行这种数据和格式分离?我正在考虑创建一个"FormattedHierarchy"对象,它只包含一个Hierarchy-object和一个Formatting-object,但我不知道这是不是一个好的设计选择.
感谢您的任何指示/提示/答案.
您可以做的最糟糕的事情是将层次结构数据表示与格式相结合.层次结构类不应该知道有关格式的任何信息.我的建议是创建一个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) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
这被称为战略设计模式.如果某些代码需要格式化您的层次结构,只需传递一个实例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() {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
每次创建格式化程序时,都会将层次结构类封装在其中.