组合模式(Composite Pattern)属于结构型设计模式,常用于树形结构的场景,比如菜单、文件目录、组织架构等。
核心思想:
让“叶子节点”和“容器节点”实现同一个接口,客户端可以统一对待。
定义叶子节点和容器节点的公共行为。
public interface Component {
void operation();
}
没有子节点。
public class Leaf implements Component {
private String name;
public Leaf(String name) {
this.name = name;
}
@Override
public void operation() {
System.out.println("叶子节点:" + name);
}
}
可以包含子节点(也可以是容器或叶子)。
import java.util.ArrayList;
import java.util.List;
public class Composite implements Component {
private String name;
private List<Component> children = new ArrayList<>();
public Composite(String name) {
this.name = name;
}
public void add(Component component) {
children.add(component);
}
public void remove(Component component) {
children.remove(component);
}
@Override
public void operation() {
System.out.println("容器节点:" + name);
for (Component child : children) {
child.operation();
}
}
}
public class Client {
public static void main(String[] args) {
Component leaf1 = new Leaf("文件1");
Component leaf2 = new Leaf("文件2");
Composite folder = new Composite("文件夹");
folder.add(leaf1);
folder.add(leaf2);
Composite root = new Composite("根目录");
root.add(folder);
root.operation();
}
}
容器节点:根目录
容器节点:文件夹
叶子节点:文件1
叶子节点:文件2
add/removeadd/remove 只放在 Composite如果你愿意,我可以:
你想看哪种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。