美文网首页
组合模式

组合模式

作者: Lemon_Home | 来源:发表于2018-03-08 14:49 被阅读24次

    1. 概念

    将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。树的结构-》组合设计模式


    image.png

    2. 使用场景

    需要表示一个对象整体或部分层次
    让客户端能够忽略不同对象层次的变化

    3. 实例

    public abstract class File {
        private String name;
    
        public File(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public abstract void watch();
    
        public void add(File file) {
            throw new UnsupportedOperationException();
        }
    
        public void remove(File file) {
            throw new UnsupportedOperationException();
        }
    
        public File getChild(int pos) {
            throw new UnsupportedOperationException();
        }
    }
    
    public class Folder extends File {
        private List<File> files;
    
        public Folder(String name) {
            super(name);
            files = new ArrayList<File>();
        }
    
        @Override
        public void watch() {
            StringBuffer fileName = new StringBuffer();
            for (File file : files) {
                fileName.append(file.getName() + ":");
            }
            System.out.println(getName() + "文件夹, " + files.size() + "个文件, " + fileName);
        }
    
        @Override
        public void add(File file) {
            files.add(file);
        }
    
        @Override
        public void remove(File file) {
            files.remove(file);
        }
    
        @Override
        public File getChild(int pos) {
            return files.get(pos);
        }
    }
    
    public class TextFile extends File {
        public TextFile(String name) {
            super(name);
        }
    
        @Override
        public void watch() {
            System.out.println(getName() + "文本文件");
        }
    }
    
    public class Client {
        public static void main(String[] args){
            TextFile textFileA = new TextFile("a.txt");
            TextFile textFileB = new TextFile("b.txt");
            TextFile textFileC = new TextFile("c.txt");
            textFileA.watch();
            Folder folder = new Folder("学习资料");
            folder.add(textFileA);
            folder.add(textFileB);
            folder.add(textFileC);
            folder.watch();
            folder.getChild(1).watch();
        }
    }
    

    4. 特性

    高层模块调用简单
    节点自由增加

    5. 在android中的运用

    view的结构是树形结构

    相关文章

      网友评论

          本文标题:组合模式

          本文链接:https://www.haomeiwen.com/subject/ovmkfftx.html