关于组合模式,可能要提到数据结构中的树,一棵树由根节点和若干叶节点组成,从这棵树的任意节点,总可以访问到这棵树的另外一个节点。组合模式则是一种形式上与树相似的代码组织方式。不同的是,我们的节点是一个个对象,且这些对象一般都具有公共的接口,也就是说,他们公用一套语言,比如执行某个命令,为某个元素添加属性,删除成员操作等等,这些特性决定了同一颗组合树内部的对象应该具有相似的结构。
组合模式用来解决的问题可以是,当我们想要将多个功能进行组合时,为这些功能提供统一的调用接口,将多个相关的功能之间共有的逻辑抽象到上层节点中进行操作后再有选择地向下传递,这样可以提高程序的执行效率并减少代码的耦合。
关于具体的代码实现,不同场景下运用组合模式的方式非常灵活,比如宏命令中,将多个宏命令再添加至某个宏命令中,这就是一种组合模式。
在组合模式的树形结构中,为了衍生子节点,要求每个节点必须拥有添加子节点的方法,同时,为了在子节点能够保持对父节点的访问,在节点的添加子节点的方法中,应该将本身的引用传递给将要生成的子节点。