组合模式
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
示例演示:
创建一个people实体类,让这个实体类里面依然包含people的对象集合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24package test.composite;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
public class People {
private Integer id;
private String name;
private List<People> peoples;
public People(Integer id, String name) {
this.id = id;
this.name = name;
peoples = new ArrayList<>();
}
public void add(People people) {
peoples.add(people);
}
}完成上述步骤,我们就可以开始演示了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package test.composite;
public class CompositeDemo {
public static void main(String[] args) {
People people = new People(1,"1");
People people2 = new People(2,"2");
People people3 = new People(3,"3");
People people4 = new People(4,"4");
people.add(people2);
people.add(people3);
people.add(people4);
System.out.println(people.toString());
}
}运行结果:
1
People(id=1, name=1, peoples=[People(id=2, name=2, peoples=[]), People(id=3, name=3, peoples=[]), People(id=4, name=4, peoples=[])])
说明:
1、组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,以此类推。
2、所谓组合模式,其实说的是对象包含对象的问题,通过组合的方式(在对象内部引用对象)来进行布局,我认为这种组合是区别于继承的,而另一层含义是指树形结构子节点的抽象(将叶子节点与数枝节点抽象为子节点),区别于普通的分别定义叶子节点与数枝节点的方式。