组合模式(Composite Pattern) 是一种结构型设计模式,常用于树形结构场景,比如菜单、文件系统、组织架构等。它的核心思想是:让单个对象和组合对象(容器)具有一致的行为接口。
下面用 Java 示例 一步一步说明怎么用。
定义叶子节点和容器节点的公共接口
public abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
public abstract void operation();
// 可选方法(默认实现,子类可重写)
public void add(Component c) {
throw new UnsupportedOperationException();
}
public void remove(Component c) {
throw new UnsupportedOperationException();
}
}
不能再包含子节点
public class Leaf extends Component {
public Leaf(String name) {
super(name);
}
@Override
public void operation() {
System.out.println("叶子节点: " + name);
}
}
可以包含子节点
import java.util.ArrayList;
import java.util.List;
public class Composite extends Component {
private List<Component> children = new ArrayList<>();
public Composite(String name) {
super(name);
}
@Override
public void add(Component c) {
children.add(c);
}
@Override
public void remove(Component c) {
children.remove(c);
}
@Override
public void operation() {
System.out.println("组合节点: " + name);
for (Component c : children) {
c.operation();
}
}
}
public class Client {
public static void main(String[] args) {
Composite root = new Composite("根节点");
Composite branch = new Composite("分支节点");
Leaf leaf1 = new Leaf("叶子1");
Leaf leaf2 = new Leaf("叶子2");
branch.add(leaf1);
branch.add(leaf2);
root.add(branch);
root.add(new Leaf("叶子3"));
root.operation();
}
}
组合节点: 根节点
组合节点: 分支节点
叶子节点: 叶子1
叶子节点: 叶子2
叶子节点: 叶子3
add/removeadd 会抛异常add/remove 只在 Composite 中定义组合模式让“单个对象”和“对象集合”用同一套接口处理,适合树形结构。
如果你愿意,我也可以帮你写一个 实际项目中的组合模式例子(如菜单权限)。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。