Код: Выделить всё
public interface Node {
}
public interface Tree {
void connect(Node parent, Node child);
}
< /code>
Теперь я хочу реализовать этот API, например: < /p>
public class NodeImpl implements Node {
private final Wrapped wrapped;
public NodeImpl(Wrapped wrapped) {
this.wrapped = wrapped;
}
public Wrapped getWrapped() {
return wrapped;
}
}
public class TreeImpl implements Tree {
@Override
public void connect(Node parent, Node child) {
// connect parent and child using the wrapped object
}
}
public class Wrapped {
// wrapped object which actually represents the node internally
}
Не помещайте обернутый объект в узле, но используйте карту в Treeimpl , который отображает узлы для оберщенных объектов. это в основном то же самое, что и выше. Он ломается, как только экземпляр узла передается в метод Connect , который не имеет связанного отображения. Тем не менее, это не важно для этого вопроса. < /P>
Также обратите внимание, что я контролирую оба: объявление интерфейса, а также реализацию. Чтобы сделать узел < /code> interface generic: < /p>
Код: Выделить всё
public interface Node {
void addChild(Node child);
}
public class NodeImpl implements Node {
private final Wrapped wrapped;
public NodeImpl(Wrapped wrapped) {
this.wrapped = wrapped;
}
public Wrapped getWrapped() {
return wrapped;
}
@Override
public void addChild(Node child) {
}
}
public class Wrapped {
// wrapped object which actually represents the node internally
}
public Node createNode() {
return new NodeImpl(new Wrapped());
}
private void run() {
Node parent = createNode();
Node child = createNode();
parent.addChild(child);
}
< /code>
NodeПодробнее здесь: https://stackoverflow.com/questions/392 ... d-to-its-a