组合模式
组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便
在android中,比较常见的就是文件-文件夹的结构
看代码:
/**
* @author: hx
* @Time: 2019/5/16
* @Description: Directory
*/
public class Directory {
private String name;
private Vector<Directory> childDirectories = new Vector();
private Vector<String> files = new Vector();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Directory> getChildDirectories() {
return childDirectories;
}
public void setChildDirectories(Vector<Directory> childDirectories) {
this.childDirectories = childDirectories;
}
public Vector<String> getFiles() {
return files;
}
public void setFiles(Vector<String> files) {
this.files = files;
}
/**
* 添加一个子目录
* @param directory
*/
public void addChildDirectory(Directory directory){
childDirectories.add(directory);
}
/**
* 移除一个子目录
* @param directory
*/
public void removeChildDirectory(Directory directory){
childDirectories.remove(directory);
}
/**
* 获取所有的子目录
*/
public Enumeration<Directory> getChildDirectory(){
return childDirectories.elements();
}
/**
* 添加一个文件
* @param file
*/
public void addFile(String file){
files.add(file);
}
/**
* 移除一个文件
* @param file
*/
public void removeFile(String file){
files.remove(file);
}
/**
* 获取所有的文件
*/
public Enumeration<String> getAllFiles(){
return files.elements();
}
@Override
public String toString() {
return "Directory{" +
"name='" + name + '\'' +
", childDirectories=" + childDirectories +
", files=" + files +
'}';
}
}
创建一个简单的文件结构
public static void main(String[] args){
Directory directoryA = new Directory();
directoryA.setName("根目录");
Vector<String> filesA = new Vector<>();
filesA.add("abc");
filesA.add("qwe");
directoryA.setFiles(filesA);
Directory directoryB = new Directory();
directoryB.setName("一级目录B");
Vector<String> filesB = new Vector<>();
filesB.add("123");
filesB.add("456");
directoryB.setFiles(filesB);
Directory directoryC = new Directory();
directoryC.setName("一级目录C");
Vector<String> filesC = new Vector<>();
filesC.add("%^^&*");
filesC.add("*&^%");
directoryC.setFiles(filesC);
directoryA.addChildDirectory(directoryB);
directoryA.addChildDirectory(directoryC);
System.out.println(directoryA);
}
输出结果:
Directory{
name='根目录',
childDirectories=[
Directory{
name='一级目录B',
childDirectories=[],
files=[123, 456]},
Directory{
name='一级目录C',
childDirectories=[],
files=[%^^&*, *&^%]
}
],
files=[abc, qwe]
}