下面给你一个Java 组合模式(Composite Pattern)的经典例子,这是教学和面试中最常见的:文件系统(目录 + 文件)模型。
组合模式用于:
将对象组合成树形结构,以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
核心角色:
// 抽象文件节点
public abstract class FileSystemNode {
protected String name;
public FileSystemNode(String name) {
this.name = name;
}
public abstract void print();
}
// 文件(叶子节点)
public class File extends FileSystemNode {
public File(String name) {
super(name);
}
@Override
public void print() {
System.out.println("文件:" + name);
}
}
import java.util.ArrayList;
import java.util.List;
// 目录(组合节点)
public class Directory extends FileSystemNode {
private List<FileSystemNode> children = new ArrayList<>();
public Directory(String name) {
super(name);
}
public void add(FileSystemNode node) {
children.add(node);
}
public void remove(FileSystemNode node) {
children.remove(node);
}
@Override
public void print() {
System.out.println("目录:" + name);
for (FileSystemNode node : children) {
node.print();
}
}
}
public class Client {
public static void main(String[] args) {
File file1 = new File("a.txt");
File file2 = new File("b.txt");
Directory dir1 = new Directory("文档");
dir1.add(file1);
dir1.add(file2);
Directory root = new Directory("根目录");
root.add(dir1);
root.add(new File("readme.md"));
root.print();
}
}
目录:根目录
目录:文档
文件:a.txt
文件:b.txt
文件:readme.md
✅ 目录和文件形成树形结构
✅ 用户对“文件”和“目录”调用方式一致
✅ 符合开闭原则(可随意扩展)
如果你愿意,我也可以给你:
你想看哪一种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。