设计模式深度解析:组合模式(Composite Pattern)及其应用实践
什么是组合模式?
组合模式是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
组合模式的核心角色
- Component(抽象组件):定义所有对象的通用接口,可以是抽象类或接口。
- Leaf(叶子节点):表示树形结构中的叶子对象,没有子节点。
- 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方法即可。
总结
组合模式通过树形结构实现了部分-整体的层次关系,使得客户端可以一致地处理单个对象和组合对象。它在文件系统、菜单设计等场景中非常实用。