在 Java 中使用组合模式(Composite Pattern)时,有几个关键点和常见“坑”需要注意,下面从设计、实现、使用三个层面总结:
✅ 推荐:
interface Component {
void operation();
}
常见两种做法:
public void add(Component c) {
throw new UnsupportedOperationException();
}
❌ 问题:
public void add(Component c) {
// do nothing
}
✅ 优点:
如果业务逻辑需要从子节点访问父节点:
add() 时设置 parentparentpublic void add(Component child) {
children.add(child);
((Composite) child).setParent(this);
}
⚠ 否则可能导致:
组合模式天然是递归结构,如果:
容易造成 StackOverflowError
✅ 建议:
List<Component> children = new ArrayList<>();
❌ 不要:
List<Object> children = new ArrayList<>();
否则强制转换频繁,容易出错
适合场景:
不适合:
例如:
但如果:
不要混用导致结构混乱
java.awt.Component / Containerjavax.swing.JComponentCompositeFilter组合模式的核心是“统一接口 + 递归结构”,重点是透明性、父子关系和避免滥用。
如果你有具体业务场景(比如菜单、权限、文件系统等),我可以给你一个更贴合的 Java 示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。