组合模式

2018-03-08  本文已影响24人  Lemon_Home

1. 概念

将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。树的结构-》组合设计模式


image.png

2. 使用场景

需要表示一个对象整体或部分层次
让客户端能够忽略不同对象层次的变化

3. 实例

public abstract class File {
    private String name;

    public File(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public abstract void watch();

    public void add(File file) {
        throw new UnsupportedOperationException();
    }

    public void remove(File file) {
        throw new UnsupportedOperationException();
    }

    public File getChild(int pos) {
        throw new UnsupportedOperationException();
    }
}
public class Folder extends File {
    private List<File> files;

    public Folder(String name) {
        super(name);
        files = new ArrayList<File>();
    }

    @Override
    public void watch() {
        StringBuffer fileName = new StringBuffer();
        for (File file : files) {
            fileName.append(file.getName() + ":");
        }
        System.out.println(getName() + "文件夹, " + files.size() + "个文件, " + fileName);
    }

    @Override
    public void add(File file) {
        files.add(file);
    }

    @Override
    public void remove(File file) {
        files.remove(file);
    }

    @Override
    public File getChild(int pos) {
        return files.get(pos);
    }
}
public class TextFile extends File {
    public TextFile(String name) {
        super(name);
    }

    @Override
    public void watch() {
        System.out.println(getName() + "文本文件");
    }
}
public class Client {
    public static void main(String[] args){
        TextFile textFileA = new TextFile("a.txt");
        TextFile textFileB = new TextFile("b.txt");
        TextFile textFileC = new TextFile("c.txt");
        textFileA.watch();
        Folder folder = new Folder("学习资料");
        folder.add(textFileA);
        folder.add(textFileB);
        folder.add(textFileC);
        folder.watch();
        folder.getChild(1).watch();
    }
}

4. 特性

高层模块调用简单
节点自由增加

5. 在android中的运用

view的结构是树形结构

上一篇 下一篇

猜你喜欢

热点阅读