树形结构

RichFaces自动构建树实现

佐手、 提交于 2020-04-07 02:37:57
树形结构在软件系统中是使用频率非常大的一种数据结构,包括一些算法的实现也是基于树形结构来进行的,比如基于二叉树的二分查找法等等。在软件系统中,树形结构更多的体现在树形菜单的构建上。对于树形结构我们都能抽取出一个统一的类结构。比如: Java代码 public class TreeNode{ private String value;//树节点的值 private String label;//树节点显示标签 private bo ... [阅读全文] 已有 0 人发表留言,猛击->> 这里 <<-参与讨论 JavaEye推荐 【杭州】高薪招聘控件高级开发工程师(9w-18w年薪) 上海30-40万年薪招聘金融咨询顾问 【杭州】高薪招聘java高级工程师,项目经理,架构师 参加赢在淘宝,获取开放平台高级权限 来源: oschina 链接: https://my.oschina.net/u/35115/blog/1526

Ext树形结构

北城余情 提交于 2020-03-29 17:18:14
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gbk"> <title>tree</title> <link rel="stylesheet" type="text/css" href="Ext/resources/css/ext-all.css" /> <script type="text/javascript" src="Ext/ext-base.js"></script> <script type="text/javascript" src="Ext/ext-all.js"></script> <script type="text/javascript"> Ext.onReady(function(){ //树控件由Ext.tree.TreePanel类定义,控件名称为TreePanel,TreePanel类继承自Panel面板 var tree = new Ext.tree.TreePanel({ el:'tree'//这里的参数‘tree’表示渲染的DOM的id }); var root = new Ext.tree.TreeNode({text:'我是根'}); //用setRootNode()方法把root放到tree里 tree.setRootNode(root);

数据结构--树形结构

狂风中的少年 提交于 2020-03-22 05:10:30
今天在博客上看到这样一段代码,感觉挺有意思,代码如下: 1 public class Edge { 2 //Name of origin town 3 public Node origin; 4 //Name of destination town 5 public Node destination; 6 //Route weight to destination 7 public int weight; 8 //next possible route 9 public Edge next; 10 //constructor 11 public Edge(Node origin, Node destination, int weight) { 12 this.origin = origin; 13 this.destination = destination; 14 this.weight = weight; 15 this.next = null; 16 } 17 18 public Edge next(Edge edge) { 19 this.next = edge; 20 return this; 21 } 22 } 23 24 graph.routeTable.put(a, new Edge(a, b, 5).next(new Edge(a, d, 5).next(new

如何返回一个树形结构数据

假装没事ソ 提交于 2020-03-17 08:06:47
前言: 树形结构在开发中还挺常见的,后端需要返回一个树形结构给前端,前端直接拿着这个树形结构展示在页面上,如何返回一个树形结构,一起随着小编看下去吧! 正文: package com.test.nodefault; import com.test.model.TestNode; import com.test.model.vo.TestNodeVo; import org.springframework.beans.BeanUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Author tanghh * @Date 2020/3/13 19:22 */ public class NodeTest { public static void main(String[]args){ //准备数据 List<TestNode> testNodeList = new ArrayList<>(); TestNode node1 = new TestNode(1,0,"父节点1"); TestNode node2 = new TestNode(2,1,"子节点"); TestNode node3 = new

结构型模式--组合模式

こ雲淡風輕ζ 提交于 2020-03-13 09:35:16
组合模式 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似得对象当作一个单一得对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。它创建了对象组的树形结构。 介绍 意图: 将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 主要解决: 它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 如何解决: 树枝和叶子实现统一接口,树枝内部组合该接口。 关键代码: 树枝内部组合该接口,并且含有内部属性 List,里面放 Component。 应用实例: 1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。 2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。 优点: 1、高层模块调用简单。 2、节点自由增加。 缺点: 在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。 使用场景: 部分、整体场景

树形结构的处理—组合模式(四)

流过昼夜 提交于 2020-03-09 18:59:40
11.4 透明组合模式与安全组合模式 通过引入组合模式, Sunny 公司设计的杀毒软件具有良好的可扩展性,在增加新的文件类型时,无须修改现有类库代码,只需增加一个新的文件类作为 AbstractFile 类的子类即可,但是由于在 AbstractFile 中声明了大量用于管理和访问成员构件的方法,例如 add() 、 remove() 等方法,我们不得不在新增的文件类中实现这些方法,提供对应的错误提示和异常处理。为了简化代码,我们有以下两个解决方案: 解决方案一: 将叶子构件的 add() 、 remove() 等方法的实现代码移至 AbstractFile 类中,由 AbstractFile 提供统一的默认实现,代码如下所示: [java] view plain copy //提供默认实现的抽象构件类 abstract class AbstractFile { public void add(AbstractFile file) { System.out.println( "对不起,不支持该方法!" ); } public void remove(AbstractFile file) { System.out.println( "对不起,不支持该方法!" ); } public AbstractFile getChild( int i) { System.out.println

组合模式,树形结构处理

馋奶兔 提交于 2020-03-09 18:59:11
1. 主要优点 组合模式的主要优点如下: (1) 组合模式可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,它让客户端忽略了层次的差异,方便对整个层次结构进行控制。 (2) 客户端可以一致地使用一个组合结构或其中单个对象,不必关心处理的是单个对象还是整个组合结构,简化了客户端代码。 (3) 在组合模式中增加新的容器构件和叶子构件都很方便,无须对现有类库进行任何修改,符合“开闭原则”。 (4) 组合模式为树形结构的面向对象实现提供了一种灵活的解决方案,通过叶子对象和容器对象的递归组合,可以形成复杂的树形结构,但对树形结构的控制却非常简单。 2. 主要缺点 组合模式的主要缺点如下: 在增加新构件时很难对容器中的构件类型进行限制。有时候我们希望一个容器中只能有某些特定类型的对象,例如在某个文件夹中只能包含文本文件,使用组合模式时,不能依赖类型系统来施加这些约束,因为它们都来自于相同的抽象层,在这种情况下,必须通过在运行时进行类型检查来实现,这个实现过程较为复杂。 3. 适用场景 在以下情况下可以考虑使用组合模式: (1) 在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,客户端可以一致地对待它们。 (2) 在一个使用面向对象语言开发的系统中需要处理一个树形结构。 (3) 在一个系统中能够分离出叶子对象和容器对象,而且它们的类型不固定,需要增加一些新的类型。

【设计模式最终总结】组合模式:树形结构的处理

一世执手 提交于 2020-03-09 18:58:50
组合模式概述 组合模式为处理树形结构提供了一种较为完美的解决方案,它描述了如何将容器和叶子进行 递归组合 , 使得用户在使用时无须对它们进行区分 , 可以一致地对待容器(包含子节点的节点)和叶子(不包含子节点的节点) 。 常用到组合模式的场景:操作系统中的目录结构、应用软件中的菜单、办公系统中的公司组织结构等等。凡是遇到XXX,子XXX的这种结构,就可以考虑组合模式。 组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。 组合模式结构图 在组合模式结构图中包含如下几个角色: ● Component(抽象构件):它可以是接口或抽象类,为叶子构件和容器构件对象声明接口,在该角色中可以包含所有子类共有行为的声明和实现。在抽象构件中定义了访问及管理它的子构件的方法,如增加子构件、删除子构件、获取子构件等。 ● Leaf(叶子构件):它在组合结构中表示叶子节点对象,叶子节点没有子节点,它实现了在抽象构件中定义的行为。对于那些访问及管理子构件的方法,可以通过异常等方式进行处理。 ● Composite(容器构件):它在组合结构中表示容器节点对象,容器节点包含子节点

设计模式之组合模式

时光总嘲笑我的痴心妄想 提交于 2020-03-09 18:57:27
转载自:http://www.cnblogs.com/chenssy/p/3299719.html 我们对于这个 图片肯定会非常熟悉,这两幅图我们可以看做是一个文件结构,对于这样的结构我们称之为树形结构。在数据结构中我们了解到可以通过调用某个方法来遍历整个树,在我们找到叶子节点后,就可以对叶子节点进行操作。我们可以将这棵树理解为一个大的容器,容器里面包含 许多的成员对象,这些成员对象既可以是容器对象,也可以是叶子对象。但是由于容器对象和叶子对象在功能上的区别,使得我们在使用过程中必须区分容器对象和叶子对象,但是这会给客户带来不必要的麻烦,客户希望能够一致对待容器对象和叶子对象。这就是组合模式的设计动机: 组合模式定义了如何将容器对象和叶子对象进行递归组合,使得客户在使用过程中无须进行区分,可以对他们进行一致处理。 一、 模式定义 组合模式组合多个对象形成树形结构以表示“整体-部分”的结构层次。 组合模式对单个对象(叶子对象)和组合对象(组合对象)具有一致性,它将对象组织到树结构中,可以用来描述整体与部分的关系。同时它也模糊了简单元素(叶子对象)和复杂元素(容器对象)的概念,使得客户能够像处理简单元素一样来处理复杂元素,从而使客户程序能够与复杂元素的内部结构解耦。 上面的图展示了计算机的文件系统,文件系统由文件和目录组成,目录下面也可以包含文件或者目录