二维树型描述信息转换为内存中树型结构数据
把id , parentId , name , url 结构的二维信息转换为内存中的树型结构对象
java类:
Node为容器接口,定义容器的规则
TreeNode为Node容器的实现类,有自己内部的存储结构
NodeService为对容器操作的接口
NodeLoader类通过NodeService类填充容器数据
public interface Node {public String getId(); public String getParentId();public Node[] getChild();public Object getValue();public void setId(String id);public void setParentId(String parentId);public void setChildNode(Node[] childNode);public void setValue(Object object);}public class TreeNode implements Node {private String id;private String parentId;private Node[] childNode;private Object value;//geters, setters methods}public interface NodeService {public Node getRoot();public Node[] getChild(Node node);}public class NodeLoader {NodeService nodeService ;public Node load(NodeService nodeService) {this.nodeService = nodeService ;Node node = nodeService.getRoot();setChild(node);return node;}private void setChild(Node node) {Node[] childNode = nodeService.getChild(node);node.setChildNode(childNode);if (null == childNode) {return;}for (int i = 0; i < childNode.length; i++) {setChild(childNode[i]);}}}
public class Menu {private String name ;private String url ;private String description ;private String order ;//geters, setters methodspublic class MenuNodeService implements NodeService{public Node getRoot(){Node rnode = MenuDao.getRootNode();return rnode ;}public Node[] getChild(Node node){Node[] rnodes = MenuDao.getChildNode(Node node);return rnodes ;}}
public class TestMenuTree {public static void main(String[] args){NodeLoader loader = new NodeLoader();NodeService nodeSerive = new MenuNodeService();Node node =loader.load(nodeSerive);print(node);}public static void print(Node node){if(node.getChild() == null || node.getChild().length == 0) return ;for(int i = 0 ; i<node.getChild().length ; i ++){log(((Menu)(node.getChild()[i].getValue())).getName());print(node.getChild()[i]);}}public static void log(String s){System.out.println(s);}}