Java 中的组合模式(Composite Pattern)虽然有很多优点(如统一处理叶子节点和容器节点、符合开闭原则等),但也有一些明显的缺点和适用限制,主要包括以下几点:
例子:一个只有两种节点的小系统,硬套 Composite 会显得啰嗦
在经典组合模式中:
add()、remove())常见做法有两种,都有问题:
public void add(Component c) {
throw new UnsupportedOperationException();
}
❌ 运行时才报错,编译期无法发现
if (component instanceof Composite) {
((Composite) component).add(child);
}
❌ 破坏多态性,代码不优雅
例如:
这些约束在组合模式中实现起来很麻烦
如果叶子节点和组合节点:
组合模式会显得“强行统一”,导致:
if (isLeaf())这反而违背设计初衷。
组合模式适合“结构天然是树形、操作统一”的场景;不适合强类型约束、行为差异大或极简单结构。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。