组合模式,又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
我们通过下面的实例来演示组合模式的用法。
组合模式的实现:
假设现在有一个学校,学校中校长管理一些老师,老师管理一些学生,我们通过实例演示了这个学校中人员的层次结构。
- 创建一个Person类
//表示一个人
public class Person {
private String type; //职位
private String name; //姓名
private List<Person> person_list; //管理的人员
public Person(String type, String name) {
this.type = type;
this.name = name;
person_list = new ArrayList<>();
}
public void add(Person person){
person_list.add(person);
}
public void remove(Person person){
person_list.remove(person);
}
public List<Person> getPerson_list(){
return person_list;
}
@Override
public String toString() {
return "Person{" +
"type='" + type + '\'' +
", name='" + name + '\'' +
'}';
}
}
- 实例来演示组合模式
public class CompositeMain {
public static void main(String[] args) {
Person master = new Person("校长","王校长");
Person teacher1 = new Person("老师","张老师");
Person teacher2 = new Person("老师","李老师");
Person student1 = new Person("学生","学生1");
Person student2 = new Person("学生","学生2");
Person student3 = new Person("学生","学生3");
master.add(teacher1);
master.add(teacher2);
teacher1.add(student1);
teacher1.add(student2);
teacher1.add(student3);
teacher2.add(student1);
teacher2.add(student2);
teacher2.add(student3);
System.out.println(master);
for(Person leadPerson:master.getPerson_list()){
System.out.println(leadPerson);
for(Person student:leadPerson.getPerson_list()){
System.out.println(student);
}
}
}
}