组合模式(Composite Pattern) 在 Java 中非常适合用来处理“部分—整体”的层次结构,并且希望客户端以一致的方式对待单个对象和组合对象。
下面从 典型适用场景 + Java 中常见例子 两个角度说明。
当你遇到以下情况时,组合模式通常很合适:
add / remove / operation()Folder
├── File
├── File
└── Folder
├── File
✅ Java 示例:
java.io.FilelistFiles()interface FileSystemNode {
int getSize();
}
class File implements FileSystemNode {
int size;
public int getSize() { return size; }
}
class Folder implements FileSystemNode {
List<FileSystemNode> children = new ArrayList<>();
public int getSize() {
return children.stream().mapToInt(FileSystemNode::getSize).sum();
}
}
Menu
├── MenuItem
└── SubMenu
├── MenuItem
✅ 适合:
Company
├── Department
│ ├── Employee
│ └── Employee
└── Department
✅ 常用于:
Form
├── TextField
└── Group
├── CheckBox
└── SelectBox
✅ 好处:
Expression
├── AndExpression
│ ├── Expression
│ └── Expression
└── ValueExpression
✅ 用于:
Shape
├── Circle
└── Group
├── Rectangle
└── Line
✅ 渲染时只需要:
shape.draw();
组合模式适合 Java 中“树形结构 + 统一操作”的场景,例如文件目录、菜单、组织架构、UI 组件和规则表达式。
如果你有具体业务(比如“订单结构”“权限系统”),我可以帮你判断是否该用组合模式,并画类图。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。