组合模式:核心思想是解决树形结构,将一个复杂的对象简单化。典型的应用就是树形结构的应用。
例:目录结构、组织架构这类问题都可以使用组合模式解决。
具体代码如下:
package com.mkf.pattern;
import java.util.Enumeration;
import java.util.Vector;
public class TreeNode {
private String name;
private TreeNode parent;
private Vector<TreeNode> children = new Vector<TreeNode>();
public TreeNode(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TreeNode getParent() {
return parent;
}
public void setParent(TreeNode parent) {
this.parent = parent;
}
/**
* 添加子节点
*
* @param node
*/
public void addChildren(TreeNode node) {
children.add(node);
node.setParent(this);
}
/**
* 删除子节点
*
* @param node
*/
public void removeChildren(TreeNode node) {
children.remove(node);
}
/**
* 获得子节点
*
* @return
*/
public Enumeration<TreeNode> getChildren() {
return children.elements();
}
@Override
public String toString() {
return "TreeNode [parent=" + (null == parent ? "" : parent.getName()) +
", name=" + name
+ ", children" + children.toString() + "]";
}
}
package com.mkf;
import com.mkf.pattern.TreeNode;
public class TestComposite {
/**
* @param args
*/
public static void main(String[] args) {
TreeNode root = new TreeNode("ROOT");
TreeNode node11 = new TreeNode("NODE11");
TreeNode node12 = new TreeNode("NODE12");
TreeNode node1121 = new TreeNode("NODE1121");
TreeNode node1122 = new TreeNode("NODE1122");
TreeNode node1221 = new TreeNode("NODE1221");
TreeNode node1222 = new TreeNode("NODE1222");
root.addChildren(node11);
root.addChildren(node12);
node11.addChildren(node1121);
node11.addChildren(node1122);
node12.addChildren(node1221);
node12.addChildren(node1222);
System.out.println(root.toString());
}
}
输出结果:
TreeNode [parent=, name=ROOT, children[
TreeNode [parent=ROOT, name=NODE11, children[
TreeNode [parent=NODE11, name=NODE1121, children[]],
TreeNode [parent=NODE11, name=NODE1122, children[]]
]
],
TreeNode [parent=, name=NODE12, children[
TreeNode [parent=NODE12, name=NODE1221, children[]],
TreeNode [parent=NODE12, name=NODE1222, children[]]
]
]
]
]