文章目录
- 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);}@Overridepublic 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);}@Overridepublic 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