设计模式深度解析:组合模式(Composite Pattern)及其应用实践

187 阅读2分钟

设计模式深度解析:组合模式(Composite Pattern)及其应用实践

什么是组合模式?

组合模式是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

组合模式的核心角色

  1. Component(抽象组件):定义所有对象的通用接口,可以是抽象类或接口。
  2. Leaf(叶子节点):表示树形结构中的叶子对象,没有子节点。
  3. Composite(组合节点):表示树形结构中的分支对象,可以包含子节点。

代码示例

抽象组件(Component)

public abstract class FileSystemComponent {
    protected String name;

    public FileSystemComponent(String name) {
        this.name = name;
    }

    public abstract void display();
}

叶子节点(Leaf)

public class File extends FileSystemComponent {
    public File(String name) {
        super(name);
    }

    @Override
    public void display() {
        System.out.println("File: " + name);
    }
}

组合节点(Composite)

public class Directory extends FileSystemComponent {
    private List<FileSystemComponent> children = new ArrayList<>();

    public Directory(String name) {
        super(name);
    }

    public void addComponent(FileSystemComponent component) {
        children.add(component);
    }

    @Override
    public void display() {
        System.out.println("Directory: " + name);
        for (FileSystemComponent component : children) {
            component.display();
        }
    }
}

客户端代码

public class Client {
    public static void main(String[] args) {
        Directory root = new Directory("Root");
        Directory documents = new Directory("Documents");
        File file1 = new File("File1.txt");
        File file2 = new File("File2.txt");

        documents.addComponent(file1);
        documents.addComponent(file2);
        root.addComponent(documents);

        root.display();
    }
}

应用场景:文件系统

组合模式非常适合用于文件系统的设计。文件和文件夹可以统一抽象为FileSystemComponent,文件夹可以包含文件或其他文件夹,形成树形结构。用户无需区分文件和文件夹,直接调用统一的display方法即可。

总结

组合模式通过树形结构实现了部分-整体的层次关系,使得客户端可以一致地处理单个对象和组合对象。它在文件系统、菜单设计等场景中非常实用。