1 组合模式(Composite)是针对由多个节点对象(部分)组成的树形结构的对象(整体)而发展出的一种结构型设计模式,它能够使客户端在操作整体对象或者其下的每个节点对象时做出统一的响应,保证树形结构对象使用方法的一致性,使客户端不必关注对象的整体或部分,最终达到对象复杂的层次结构与客户端解耦的目的。
    2 该模式适合 无论拿出哪一个部分,其部分与整体的关系都是类似的场景,如文件系统
    对于可以递归的场景可以用该设计模式
    3 首先需要定义一个类 来 模糊 部分和整体 因为这一级的部分 就是 下一级的整体

    1. public abstract class Node{
    2. protected String name;
    3. public Node(String name){this.name = name;}
    4. protected abstract void add(Node child);
    5. ...remove;
    6. ...delete;
    7. }

    4 文件夹类 和文件类 分别继承 该 Node,文件类无法调用add方法
    5 文件类调用add后 可以以抛出异常的形式来确保此处逻辑的正确性,外部如果捕获到该异常则可以做出相应的处理,读者可以自行实践
    6 通过组合模式后,可以很简洁明了的实现递归,如要展示文件树

    1. public void tree(int space){
    2. super.tree(space); //做具体的操作
    3. space++;
    4. for(Node node : childrenNodes)
    5. node.tree(space);
    6. }

    image.png
    7 组合模式将树形结构的特点发挥得淋漓尽致,作为最高层级抽象的抽象节点类(接口)泛化了所有节点类,使任何“整体”或“部分”达成统一