zoukankan      html  css  js  c++  java
  • 组合模式(设计模式_21)

    组合模式,网上的各种专业术语搞得人,审美疲劳,其实通俗易懂的理解就是,让使用者对单独对象还是对组合对象使用都是一致的,组合模式是以树形结构的表示,组合模式和装饰模式有相似点,只是他们的应用场景是不一样的,以下代码举例演示:


    package com.oop.demo1;
    
    /**
     * 抽象出家族抽象类
     * @author Liudeli
     *
     */
    public abstract class Family {
    
        protected String name;
    
        public Family(String name) {
            this.name = name;
        }
    
        public abstract void add(Family component);
    
        public abstract void remove(Family component);
    
        public abstract void display(int depth);
    
    }
    
    package com.oop.demo1;
    
    /**
     * 在组合中,属于叶节点,叶节点没有子节点
     * @author Liudeli
     *
     */
    public class Leaf extends Family{
    
        public Leaf(String name) {
            super(name);
        }
    
        public void add(Family component) {
            // 注意:叶节点是没有子节点的
        }
    
        public void remove(Family component) {
            // 注意:叶节点是没有子节点的
        }
    
        public void display(int depth) {
    
            String level = "";
    
            for(int i=0;i<depth;i++) {
                level += "-";
            }
            System.out.println(level + name);
        }
    }
    
    package com.oop.demo1;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 定义有节点的行为,用于存储子部件
     * @author Liudeli
     *
     */
    public class Composite extends Family{
    
        private List<Family> list = new ArrayList<Family>();
    
        public Composite(String name) {
            super(name);
        }
    
        public void add(Family component) {
            list.add(component);
        }
    
        public void remove(Family component) {
            list.add(component);
        }
    
        public void display(int depth) {
            for (Family component : list) {
                component.display(depth + 2);
            }
        }
    
    }
    
    /**
     * 测试程序
     * @author Liudeli
     *
     */
    public class Main {
    
        public static void main(String[] args) {
            // root 
            Composite root = new Composite("root");
            root.add(new Leaf("伯伯"));
            root.add(new Leaf("叔叔"));
    
            Composite comp1 = new Composite("Comp X");
            comp1.add(new Leaf("大儿子"));
            comp1.add(new Leaf("二儿子"));
    
            root.add(comp1);
    
            Composite comp2 = new Composite("Comp Y");
            comp2.add(new Leaf("三儿子"));
            comp2.add(new Leaf("小儿子"));
    
            root.add(comp2);
    
            root.add(new Leaf("父亲"));
    
            root.display(1);
        }
    
    }

    运行结果:
    这里写图片描述


    这里写图片描述


    谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
    刘德利CSDN博客, http://blog.csdn.net/u011967006

  • 相关阅读:
    fiddler的详细分析
    在Linux中mysql的一些基本操作
    MySQL运行状态show status详解
    第1节-软件测试基本概念及分类
    HTML
    python 目录
    Web框架 Bottle 、Flask 、Tornado
    Query
    JavaScript基础篇
    DOM、BOM 操作
  • 原文地址:https://www.cnblogs.com/android-deli/p/10322194.html
Copyright © 2011-2022 走看看