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


    四、组合模式(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方法本身进行递归调用。

  • 相关阅读:
    恢复ubuntu和windows的双引导
    手把手教你做MVC3中的完美分页控件
    201521123024 《Java程序设计》第5周学习总结
    201521123024 《Java程序设计》第1周学习总结
    201521123024 《Java程序设计》第6周学习总结
    201521123024 《Java程序设计》第2周学习总结
    201521123024 《Java程序设计》第4周学习总结
    201521123024《Java程序设计》第3周学习总结
    201521123024《Java程序设计》第7周学习总结
    201521123024《Java程序设计》第8周学习总结
  • 原文地址:https://www.cnblogs.com/wanxi/p/6476239.html
Copyright © 2020-2023  润新知