• 第十五讲、组合模式


    1.定义

    Composite模式也叫组合模式,是构造型的设计模式之一。通过递归手段来构造树形的对象结构,并通过一个对象来访问整个对象树。

    2.组合模式的结构

        

    3.组合模式的角色和职责

    Component(树形结构的节点抽象)

    • 为所有的对象定义统一的接口(公共属性,行为等的定义)
    • 提供管理子节点对象的接口方法
    • 【可选】提供管理父节点的接口方法

    Leaf(树形结构的叶节点),Component的实现子类

    Composite(树形结构的枝节点),Component的实现子类

    4.代码演示

    package test.com.composite;
    
    import java.util.List;
    /*
     * Component--树形结构的节点抽象
     */
    public interface IFile {
        //显示目录或文件的名称
        public void display();
        //添加
        public boolean add(IFile file);
        //删除
        public boolean remove(IFile file);
        //获取子节点
        public List<IFile> getChild();
    }
    package test.com.composite;
    
    import java.util.ArrayList;
    import java.util.List;
    /*
     * Composite--树形结构的枝节点
     */
    public class Folder implements IFile {
        private String name;
        private List<IFile> children;
        
        public Folder(String name) {
            this.name = name;
            this.children = new ArrayList<IFile>();
        }
        @Override
        public void display() {
            System.out.println(name);
        }
    
        @Override
        public boolean add(IFile file) {
            return children.add(file);
        }
    
        @Override
        public boolean remove(IFile file) {
            return children.remove(file);
        }
    
        @Override
        public List<IFile> getChild() {
            return children;
        }
    
    }
    package test.com.composite;
    
    import java.util.List;
    /*
     * Leaf--树形结构的叶节点
     */
    public class File implements IFile {
        private String name;
        
        public File(String name) {
            this.name = name;
        }
    
        @Override
        public void display() {
            System.out.println(name);
        }
    
        @Override
        public boolean add(IFile file) {
            return false;
        }
    
        @Override
        public boolean remove(IFile file) {
            return false;
        }
    
        @Override
        public List<IFile> getChild() {
            return null;
        }
    
    }
    package test.com.composite;
    
    import java.util.List;
    /*
     * 测试类
     */
    public class Main {
        public static void main(String[] args) {
            IFile rootFolder = new Folder("c:");
            IFile oneFolder = new Folder("oneFolder");
            IFile oneFile = new File("oneFile.text");
            rootFolder.add(oneFolder);
            rootFolder.add(oneFile);
            
            IFile twoFolder = new Folder("twoFolder");
            IFile twoFile = new File("twoFile.text");
            oneFolder.add(twoFolder);
            oneFolder.add(twoFile);
            displayTree(rootFolder, 0);
            
        }
        
        public static void displayTree(IFile rootFolder, int deep) {
            rootFolder.display();
            List<IFile> list = rootFolder.getChild();
            for(int i = 0; i < list.size(); i++) {
                IFile file = list.get(i);
                for(int j = 0; j <= deep; j++) {
                    System.out.print("--");
                }
                if(file instanceof File) {
                    file.display();
                } else {
                    displayTree(file, deep+1);
                }
            }
        }
    }
  • 相关阅读:
    Android studio 中国的垃圾问题解决
    实现一个简单的boot
    代理下载android4.4源代码
    《程序员在第一季度追姐姐的书》——提升自己的形象气质
    第46周四
    Spring单例与线程安全小结
    2014第46周二
    第46周一
    第45周日
    第45周六
  • 原文地址:https://www.cnblogs.com/zheaven/p/10108621.html
Copyright © 2020-2023  润新知