组合模式

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的结构是树形结构

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 商品类别树## 考虑这样一个实际的应用:管理商品类别树。 在实现跟商品有关的应用系统的时候...
    猿码道阅读 2,681评论 10 27
  • 目录 本文的结构如下: 引言 什么是组合模式 模式的结构 典型代码 代码示例 优点和缺点 适用环境 模式应用 一、...
    w1992wishes阅读 166评论 0 0
  • 继承是is-a的关系。组合和聚合有点像,有些书上没有作区分,都称之为has-a,有些书上对其进行了较为严格区分,组...
    时待吾阅读 79评论 0 0
  • 参考设计模式读书笔记-----组合模式C++设计模式——组合模式Javascript设计模式理论与实战:组合模式 ...
    合肥懒皮阅读 45评论 0 0
  • 组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器...
    lyu571阅读 52评论 0 0