我需要为XML文档中的各种元素添加各种属性,添加新属性的逻辑非常独立。我将创建一堆类来添加这些属性,我想知道我应该使用哪种设计模式,我想到了以下选项:
装饰 子类太多了。我可能有10到20个模块来装饰XML,但我不喜欢20个子类。
责任链: 我不希望单个模块完成整个过程,因为它们是独立的。
非常欢迎任何建议。
感谢。
答案 0 :(得分:1)
你还没有给出那么多的背景。编程语言,您正在使用的XML解析模型,以及确定给定元素是否需要属性所需的上下文。
所以这是一种方法:
顺便说一句 - 此代码尚未编译和测试。这只是该方法的一个例子。
public interface ElementManipulator {
public void manipulateElement(Element elem);
}
public class AManipulator implements ElementManipulator {
public void manipulateElement(Element elem) {
if (elem.name == "something-A-cares-about") {
//add A's attribute(s) to elem
}
}
}
public class BManipulator implements ElementManipulator {
public void manipulateElement(Element elem) {
if (elem.name == "something-B-cares-about") {
//add B's attribute(s) to elem
}
}
}
public class XMLManipulator {
ArrayList<? extends ElementManipulator> manipulators;
public XMLManipulator () {
this.manipulators = new ArrayList<? extends ElementManipulator>();
this.manipulators.add(new AManipulator());
this.manipulators.add(new BManipulator());
}
public void manipulateXMLDocument(XMLDocument doc) {
Element rootElement = doc.getRootElement();
this.manipulateXMLElement(rootElement);
}
/**
* Give the provided element, and all of it's children, recursively,
* to all of the manipulators on the list.
*/
public void manipulateXMLElement(Element elem) {
foreach (ElementManipulator manipulator : manipulators) {
manipulator.manipulateElement(elem);
}
ArrayList<Element> children = elem.getChildren();
foreach(Element child: children) {
this.manipulateXMLElement(child);
}
}
}