组合模式(Composite):
是一组对象的组合,这些对象可以是容器对象,表现为组的概念:另外一些对象则代表了单个对象,或成为叶子对象。在对组合进行建模时,必须注意两个重要的概念。第一个概念是组对象允许包含单对象,也可以再包含其他的组对象(常见的错误是将组对象设计为只允许包含叶子对象)。第二个概念则是要为组合对象和单对象定义共同的行为。就可以为组对象与单对象定义统一的类型,并将该组对象建模为包含同等对象的集合。
组合模式的意图是为了保证客户端调用单对象与组合对象的一致性。
下图展示了一个经典的组合结构。Leaf类和Composition类都实现自一个抽象的Compoment通用接口,同时Composition对象又包含了其他的Composition和Leaf对象的集合。
Component类中为包含任何一个具体方法,因而可以将其定义为接口,让Leaf类和Composite类去实现它。
图中组合模式的关键在于组合对象可以包含其他组合对象(不仅仅是叶子对象),且Composite和Leaf节点共享了一个共同的接口。