您好,欢迎访问一九零五行业门户网

Java 实现组合(Composite)模式的详细介绍

类图
/** * 树 整体 * * @author stone * */ public class tree { private treenode root; //根节点 public tree(string name) { this.root = new treenode(name); } public treenode getroot() { return root; } }
/** * 树节点 部份 * 也可以自身代表树:一堆节点组成了一颗树 * * @author stone * */ public class treenode { private string name; private treenode parent; private list<treenode> children; public treenode(string name) { this.name = name; this.children = new arraylist<treenode>(); } public void setname(string name) { this.name = name; } public string getname() { return name; } public void setparent(treenode parent) { this.parent = parent; } public treenode getparent() { return parent; } public list<treenode> getchildren() { return children; } public void add(treenode node) { this.children.add(node); } public void remove(treenode node) { this.children.remove(node); } }
/* * 组合(composite)模式 又叫做部分-整体模式 * 它使我们层级、树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦 * 以下情况下适用composite模式: 1.你想表示对象的部分-整体层次结构 2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 */ public class test { public static void main(string[] args) { // tree treea = new tree("a"); // treea.getroot().add(new treenode("b")); // treea.getroot().add(new treenode("c")); // treenode treenoded = new treenode("d"); // treenoded.add(new treenode("d1")); // treenoded.add(new treenode("d2")); // treea.getroot().add(treenoded); // print(treea.getroot()); /* * 上面使用了tree对象, * 下面只使用treenode对象,符合组合模式的定义,既代表部分也代表整体 */ treenode treea = new treenode("a"); treea.add(new treenode("b")); treea.add(new treenode("c")); treenode treenoded = new treenode("d"); treenoded.add(new treenode("d1")); treenoded.add(new treenode("d2")); treea.add(treenoded); print(treea); /* * 其他示例:文件系统{目录、文件}, 类似这种可用递归遍历的结构, * 用一个对象就能表示部分与整体,都可以用组合模式 */ } public static void print(treenode root) { if (root == null) return; linkedlist<treenode> linkedlist = new linkedlist<treenode>(); linkedlist.add(root); while (!linkedlist.isempty()) { treenode node = linkedlist.removefirst(); system.out.println(node.getname()); list<treenode> children = node.getchildren(); for (int i = 0; i < children.size(); i++) { treenode next = children.get(i); list<treenode> children2 = next.getchildren(); if (!children2.isempty()) { linkedlist.add(next); } else { system.out.println(next.getname()); } } } } }
打印
a b c d d1 d2
以上就是java 实现组合(composite)模式的详细介绍的详细内容。
其它类似信息

推荐信息