设计模式之组合模式

来源:互联网 发布:数据挖掘 答案 韩家炜 编辑:程序博客网 时间:2024/05/29 10:58

设计模式之组合模式

组合模式的简单介绍

组合模式(composite),是一种比较常用的设计模式,这里需要区分组合模型与组合模式的区别,组合模型是指对象之间的依赖关系(还有继承等),组合模式使用于层级结构的模型之中(比如树,具体的可以有文件系统的管理,管理文件、目录等),基本思想是:将部分和整体用树形结构表示出来,客户端在处理的时候可以使用统一的方式进行处理而不需要详细区分不同部分的区别。在使用的过程中,通常包含两个构件:叶子构件以及容器构件。

组合模式的具体实现

接下来,通过模拟一个文件系统的管理,管理文件以及目录来实现组合模式,加深对组合模式的理解

/** * 抽象构件 */abstract class Component {    private String name;    public Component(String name) {        this.name = name;    }    public String getName() {        return name;    }    public abstract void scan();}/** * 叶子构件,这里为了方便直接定义为叶子构件 * 实际上应该使用具体的类型,比如文件构件 * MP3构件、图片构件等 */class LeafComponent extends Component{    public LeafComponent(String name) {        super(name);    }    @Override    public void scan() {        System.out.printf("File: %s\n", getName());    }}/** * 容器构件,同上 */class ContainerComponent extends Component{    private List<Component> childs = new ArrayList<>();    public ContainerComponent(String name) {        super(name);    }    public void add(Component c){        childs.add(c);    }    @Override    public void scan() {        System.out.printf("Dir: %s\n", getName());        for (Component c : childs){            c.scan();        }    }}

从上面可以看到,将目录以及文件定义成构件之后,在进行一些通用性的操作,比如访问、删除等的时候,就非常方便,而不需要区分是文件类型还是目录了

总结

组合模式以一种统一的方式来管理对象,将不同的对象按照基本相同的方式进行组织,这种方式尤其适用于具有树形结构的对象,比如XML、HTML、文件管理等,通过统一的接口可以直接操作整体的对象,而不再需要区分对象之间的具体差异