定义
组合模式允许以相同的方式处理单个对象和对象的组合体
使用场景
- 当你的程序结构有类似树一样的层级关系时,例如文件系统,视图树,公司组织架构等等
- 当你要以统一的方式操作单个对象和由这些对象组成的组合对象的时候。
uml类图
从上图可见组合模式共有3组成部分
- Component
抽象类,定义统一的处理操作。
- Leaf
叶子节点,即单个对象
- Composite
组合对象,里面持有一个List。
我们使用了组合模式中所谓的透明方式,因为我们将单个对象和组合对象按照完全一样的事物对待了,所以接口对外很透明。统一操作都是在Component中定义的,所有继承至它的节点都要实现,而有些操作叶子节点是不支持的,例如添加移除节点等,这样就要求叶子节点处理好这些方法。
实例
编写一个资源管理器 输出文件所在的磁盘 (Disk) 文件夹(Folder)和文件类型(File)
典型的树状结:
第一,设计一个个体与组合通用的接口
定义对外展示的统一处理接口
/**
* @author nwk
* @version 1.0
* @date 2021/10/18 16:05
* 文件夹资源
*/
public abstract class Resources {
private String name;
protected void add(Resources resources)
{
//默认实现
throw new UnsupportedOperationException();
}
protected void remove(Resources resources){
//默认实现
throw new UnsupportedOperationException();
}
public Resources(String name) {
this.name = name;
}
public Resources() {
}
protected abstract void print();
public String getName() {
return name;
}
public void setName(String name) {
this</