Java 设计模式之组合模式
文章目录
- Java 设计模式之组合模式
- 概述
- UML
- 代码实现
Java 设计模式之组合模式
概述
- 组合模式(Composite):将对象组合成树形结构以表示’部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
- 优点:客户端可以统一处理单个对象和组合对象。支持递归组合,简化了复杂结构的处理。
UML
- Component:抽象了或接口,定义叶子节点和组合节点的共同行为
- Leaf:叶子节点,表示没有子组件。
- Composite:组合节点,可以包含其他子组件。
代码实现
定义组件:
public abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
/**
* 显示
*
* @param level 第几层级
*/
public abstract void display(int level);
}
定义叶子节点:
public class File extends Component {
public File(String name) {
super(name);
}
@Override
public void display(int level) {
System.out.println("-".repeat(level * 4) + "File:" + name);
}
}
定义组合节点:
public class Directory extends Component {
private ArrayList<Component> children = new ArrayList<>();
public Directory(String name) {
super(name);
}
public void addComponent(Component component) {
children.add(component);
}
public void removeComponent(Component component) {
children.remove(component);
}
@Override
public void display(int level) {
System.out.println("-".repeat(level * 4) + "Directory:" + name);
for (Component component : children) {
component.display(level + 1);
}
}
}
使用:
public class Client {
public static void main(String[] args) {
File file1 = new File("file1.txt");
File file2 = new File("file2.txt");
File file3 = new File("file3.txt");
File file4 = new File("file4.txt");
Directory root = new Directory("root");
Directory dir1 = new Directory("dir1");
Directory dir2 = new Directory("dir2");
root.addComponent(file1);
root.addComponent(dir1);
dir1.addComponent(file2);
dir1.addComponent(dir2);
dir2.addComponent(file3);
dir2.addComponent(file4);
root.display(0);
}
}
输出:
Directory:root
----File:file1.txt
----Directory:dir1
--------File:file2.txt
--------Directory:dir2
------------File:file3.txt
------------File:file4.txt