composite模式,组合模式
用于创造出 文件夹和文件 这样的 递归模式,相当于一种 树形结构 或 目录结构 ,一层一层往具体,像路径一样:此电脑 > 本地磁盘(C:) > Program Files > WiinRAR
一般通用格式
类图:
- Component :定义了复合内对象必须实现的接口,比如说文件系统资源为文件和文件夹定义了移动、复制、重命名和获取大小的方法;
- Leaf :叶子节点是那些没有子元素的对象。它们实现了 Component 接口定义的服务,比如一个文件对象实现了移动、复制、重命名等 Component 接口里的相关行为;
- Composite: 复合对象存储子元素外,还实现了 Component 中定义的行为。复合通过将行为委托给子组件的方式来实现 Component 中的方法。此外,复合对象还提供了新增、移除和获取子组件的方法。
Entry类:共同的点
package composite模式;
public abstract class Entry {
public abstract String getName();
public abstract int getSize();
protected abstract void printList(String prefix);
public Entry add(Entry entry) throws RuntimeException{
//加入目录
throw new RuntimeException();
}
public void printList() {
printList("");
}
public String toString() {
return getName() + " (" + getSize() + ")";//显示文字
}
}
Fire类:实现类,树节点
package composite模式;
public class File extends Entry{
private String name;
private int size;
public File(String name, int size) {
this.name = name;
this.size = size;
}
public String getName() {
return name;
}
public int getSize() {
return size;
}
protected void printList(String prefix) {
System.out.println(prefix + "/" + this);
}
}
Directory类:可扩充,叶子节点
package composite模式;
public class Directory extends Entry{
private String name;//文件夹名字
private ArrayList directory = new ArrayList()<