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());
}
}
}
}
运行结果:
3. 一些思考
我个人觉得组合模式和建造者模式有异曲同工之处,不过建造者模式更适合复杂对象的内部组件不变,组合方式经常变化的情况,一般来说只有两层层级。而组合模式是把一组相似的对象当作一个单一的对象,更关注上下层之间的关系,可以有多层层级。