android設計模式二十三式(十一)——組合模式(Composite)

組合模式

組合模式有時又叫部分-整體模式在處理類似樹形結構的問題時比較方便

在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]
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章