組合模式
組合模式有時又叫部分-整體模式在處理類似樹形結構的問題時比較方便
在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]
}