Адаптер обычно используется для моста между двумя несовместимыми интерфейсами . Это, похоже, не ваша проблема здесь. На самом деле, я не вижу никаких проблем - поскольку объектные языки по своей природе иерархичны, вы должны иметь возможность использовать в основном взаимно-однозначное отображение между классом и узлом дерева.
Возможно, под "Адаптером" вы просто подразумеваете класс, который оборачивает Node или любой конкретный тип Object, который описывает узлы вашего дерева, и я бы согласился. Должны быть довольно очевидные отношения родитель-потомок, которые вы можете описать, имея собственные классы узлов или каким-либо образом возвращая массив дочерних узлов / классов и атрибуты как получатели / установщики. Любая необходимая проверка может быть выполнена установщиками или, если необходимо, во время построения, поскольку класс проверяет данный узел и его дочерние узлы. Примерно так:
public class NodeFu {
private Node node;
public NodeFu(Node node){
this.node = node;
// perhaps traverse and validate node data here
}
public String getNodeAttribute(String attrName){
// pardon the offense, Demeter, only for demonstration...
return node.getAttributes().getNamedItem(attrName).toString();
}
public void setNodeAttribute(String attrName, attrValue){
node.setAttributeValue(attrName, attrValue);
}
public ArrayList<NodeFu> getChildren(){
ArrayList<NodeFu> children = new ArrayList<NodeFu>();
for (Node childNode : node.getChildNodes()){
children.add(new NodeFu(childNode));
}
return children;
}
}
Я предполагаю, что у вас есть больше бизнес-логики для добавления к этому классу, который будет манипулировать данными на самом узле, в противном случае класса Node будет достаточно, и вы можете просто использовать его напрямую.