简短回答:不能“替代”继承,组合模式也不是用来“废除”继承的,而是用来“补充/规避”继承的某些问题。
下面说清楚区别和关系。
组合模式(Composite Pattern)是一种结构设计模式,用于:
示例:
interface Node {
void operation();
}
class Leaf implements Node {
public void operation() {}
}
class Composite implements Node {
List<Node> children = new ArrayList<>();
public void operation() {
for (Node n : children) n.operation();
}
}
这里仍然用了继承(implements Node)。
很多人说的“组合替代继承”,其实是:
“组合优于继承”(Composition over Inheritance) ——《Effective Java》
意思是:
extends 复用代码例如:
class Bird extends Flyable {
}
class Bird {
private FlyAbility fly;
}
这是复用方式的替代,不是“组合模式”替代继承。
组合模式本身:
所以:
组合模式是“在继承基础上用组合组织对象”
✅ 适合:
❌ 不适合:
如果你愿意,我可以:
你更想看哪一种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。