因此,我想知道从雇员和雇主之间的关系创建结构的最佳方法是什么,例如,使用可能的循环
id: 1 boss: 2
id: 2 boss: 3
id: 3 boss: 1
Id: 4 boss: 1
id: 10 boss: 11
id: 11 boss: null然后能够找到id1的老板,例如
我一直在考虑具有反向关系的简单树,但是如何为循环做准备?
public class Tree<T> {
private Node<T> root;
public Tree(T rootData) {
root = new Node<T>();
root.data = rootData;
root.employees = new ArrayList<Node<T>>();
}
public static class Node<T> {
private T data;
private List<Node<T>> employees ;
}
}发布于 2019-12-01 21:25:10
我已经用设计模式解决了这个问题。
我使用了两种模式,因此模式composite和模式visitor
我用下面的代码来写这个结构
所有节点的接口
public interface INode{
//for appli visitor
public void accept(IVisitor visitor);
}用于实现您的叶节点
public class INodeLeaf implements INode{
public String getFoo();
}为了实现中间节点的抽象类,您可以使用更多类型的节点中介
public abstract class AbstractNode implements INode{
private INode left;
private INode right;
public AbstractNode(INode left, INode right) {
this.left = left;
this.right = right;
}
public INode getLeft() {
return left;
}
public INode getRight() {
return right;
}
}您必须至少是AbstractNode中的一个具体节点
对于访问结构,您可以实现patter访问器,如下所示
public interface IVisitor {
void visitNodeLeaf(NodeLeaf node);
void visitYorConcreateNode(YourConcreateNode node);
}实现可以是
public class VisitorFoo implements IVisitor {
private String foo;
@Override
public void visitNodeLeaf(INodeFoglia node) {
foo += node.getFoo();
}
@Override
public void visitYorConcreateNode(NodeDivisione node) {
node.getLeft().accept(this);
node.getRight().accept(this);
}
}您的问题上的
我是树结构的一般实现,对于你的例子,你可以需要List<INode>和访问者内部的方法visitYorConcreateNode(..),应该是访问列表,但实现不会改变。
对于结构上的复杂操作对于结构上的复杂操作我认为最好也使用模式Strategy。
在此之后
public class StrategyFoo implement IStrategy{
private IVisitor setTheVisitor;
//other
public void runOperation(){//do nothind for moment}
}https://stackoverflow.com/questions/59125669
复制相似问题