【起源】
递归的对象组合(如:树木,树林,森林),对容器对象的操作需要递归到基本对象上,因此Client程序在处理时,需要判断是容器对象还是基本对象,并分别处理。
如何让Client不关注容器对象的内部结构,就让容器对象的处理与基本对象一样。
【动机】
将对象组合成树形结构,以表示“整体 - 部分”的层次结构。
Composite使得用户对单个对象和组合对象的使用具有一致性。
【核心】
容器对象本来只是基本对象的集合,不具备基本对象的行为,使用时要递归到基本对象上。这个递归操作放在Client中很麻烦。
想法:让容器对象具有基本对象的行为,不需要递归到每个基本对象上。(有一呼百应的感觉,呵呵)
本质:把Client中的递归操作,封装到了容器对象的行为中。
比喻:宁夏省:给全宁夏上调养老保险。银川:给全银川上调养老保险。我:给我上调养老保险啦,哈哈
【代码实例】
【模型图】