组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
在我看来,组合模式是用来屏蔽节点与叶子的区别的,在实际使用中我还真没想出有用过这种做法。不过看书上的菜单的介绍确实还是挺符合这种情况的。我们在使用菜单的时候,菜单下面同时有菜单项和子菜单,子菜单下面又有菜单项,点击菜单项会展示对应功能,点击子菜单会显示子菜单下面的节点。组合模式可以屏蔽菜单项和子菜单的差别。
Leaf实现了相应的operation操作,Composite作为菜单,里面包含了菜单项和子菜单,即Leaf和子Composite。对于用户Client来说,不需要知道操作的是Leaf还是Composite,对客户来说,操作的是Component,通过迭代器,就可以遍历菜单下所有的菜单项了。