Java设计模式概述之结构型模式(组合模式)

来源:互联网 发布:恐龙统治知乎 编辑:程序博客网 时间:2024/06/05 00:48

四、组合模式(Composite)

组合模式相对不好阐述。引用大话设计模式的片段:“当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式了。”

组合模式与树形结构程序设计是密不可分的。组合模式很好的体现了“整体——部分”的关系。

这里写图片描述

下面给大家一段自己写的有关组合模式的代码:

import java.util.Enumeration;import java.util.Vector;/** * @author Hanlin Wang */public class CompositeMode {    public static void main(String[] args) {        TreeNode A = new TreeNode("A");        TreeNode B = new TreeNode("B");        TreeNode C = new TreeNode("C");        TreeNode D = new TreeNode("D");        TreeNode E = new TreeNode("E");        TreeNode F = new TreeNode("F");        TreeNode G = new TreeNode("G");        TreeNode H = new TreeNode("H");        TreeNode I = new TreeNode("I");        TreeNode J = new TreeNode("J");        TreeNode K = new TreeNode("K");        TreeNode L = new TreeNode("L");        TreeNode M = new TreeNode("M");        TreeNode N = new TreeNode("N");        TreeNode O = new TreeNode("O");        A.addChild(B);        A.addChild(C);        B.addChild(D);        B.addChild(E);        C.addChild(F);        C.addChild(G);        D.addChild(H);        D.addChild(I);        E.addChild(J);        E.addChild(K);        F.addChild(L);        F.addChild(M);        G.addChild(N);        G.addChild(O);        TreeNode.showTreeNodes(A);        /*         * 运行结果:         *          * A节点的子元素: B  C           * B节点的子元素: D  E           * D节点的子元素: H  I           * E节点的子元素: J  K           * C节点的子元素: F  G           * F节点的子元素: L  M           * G节点的子元素: N  O           */    }}//定义节点类class TreeNode{    private String nodeName;    private Vector<TreeNode> children = new Vector<TreeNode>();    public TreeNode(String nodeName){        this.nodeName = nodeName;    }    public String getNodeName() {        return nodeName;    }    public void setNodeName(String nodeName) {        this.nodeName = nodeName;    }    public Enumeration<TreeNode> getChildren() {        return children.elements();    }    public void addChild(TreeNode node) {        children.add(node);    }    public static void showTreeNodes(TreeNode node){        Enumeration<TreeNode> children = node.getChildren();        System.out.print(node.getNodeName()+"节点的子元素: ");        while (children.hasMoreElements()) {            TreeNode subNode = children.nextElement();            System.out.print(subNode.getNodeName()+"  ");        }        Enumeration<TreeNode> children2 = node.getChildren();        while (children2.hasMoreElements()) {            TreeNode subNode = children2.nextElement();            if (subNode.getChildren().hasMoreElements()) {                System.out.println();                showTreeNodes(subNode);            }        }    }}

TreeNode是基本的节点类,里面定义了一个Vector类型的children成员变量和一系列操纵叶子节点的方法。最后还定义了一个showTreeNodes方法用于打印本节点及本节点以下的所有的叶子节点。

注意,showTreeNodes方法中会判断下一个叶子节点内的节点是否还有子节点,如果有,对showTreeNodes方法本身进行递归调用。

0 0