设计模式——组合模式

209 阅读1分钟

1. 组合模式概述

组合模式,又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

(1) 适用情况

需要根据树形结构来组合对象,可以使用组合模式。

(2) 优点

有树形结构的优点,层级结构清晰,一目了然,高层模块调用方便。

(3) 缺点

所有对象属于同一类,或者需要实现同一接口。

2. 组合模式实例

使用组合模式来管理学校的层级关系:

public class Person {
    private String name;
    private String vocation;
    private List<Person> subPeople;

    public Person(String name, String vocation) {
        this.name = name;
        this.vocation = vocation;
        this.subPeople = new ArrayList<>();
    }

    public String getName() {
        return name;
    }

    public String getVocation() {
        return vocation;
    }

    public List<Person> getSubPeople() {
        return subPeople;
    }

    public void add(Person person) {
        subPeople.add(person);
    }
}
public class CompositeDemo {
    public static void main(String[] args) {
        Person wang = new Person("王涛", "校长");
        Person li = new Person("李林", "老师");
        Person zhang = new Person("张扬", "老师");
        Person ming = new Person("小明", "学生");
        Person hong = new Person("小红", "学生");
        Person gang = new Person("小刚", "学生");

        // 校长管老师
        wang.add(li);
        wang.add(zhang);
        // 老师管学生
        li.add(ming);
        li.add(hong);
        zhang.add(gang);

        for (Person teacher : wang.getSubPeople()) {
            System.out.println("\n" + teacher.getVocation() + teacher.getName() + "管理的有:");
            for (Person student : teacher.getSubPeople()) {
                System.out.println(student.getVocation() + student.getName());
            }
        }
    }
}

运行结果:
image.png

3. 一些思考

我个人觉得组合模式和建造者模式有异曲同工之处,不过建造者模式更适合复杂对象的内部组件不变,组合方式经常变化的情况,一般来说只有两层层级。而组合模式是把一组相似的对象当作一个单一的对象,更关注上下层之间的关系,可以有多层层级。

参考引用

组合模式:www.runoob.com/design-patt…