您可以做的最糟糕的事情是将层次结构数据表示与格式相结合。层次结构类不应该对格式化一无所知。我的建议是创建一个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() {
//...
}
}
每次创建格式化程序时,都将层次结构类封装在其中。