组合模式的英文原文是:Compose objects into tree structures to represent part-whole hiearachies. Composite lets clients treat individual objects and compositions of objects uniformly. 意思是:将对象组合成树形结构以表示“部分—整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
组合模式有三个角色:
抽象构件(component)角色:定义了参加组合对象的共有的方法和属性。
叶子构件(Leaf)角色:该角色是叶子对象,其下没有分支,也就是没有子节点。
数字构件(composite)角色:该角色代表了参加组合的,其下有分支的树枝对象,它的作用是将树枝和叶子组合成一个树形结构,并定义出管理子对象的方法。
组合模式类图:
各个类对应的实现代码:
抽象构件的代码:
package com.zz.composite; /** * 抽象构件接口 * Copyright 2015年4月25日 * created by txxs * all right reserved */ public interface Component { public void operation(); }
package com.zz.composite; import java.util.ArrayList; /** * 定义树枝构件 * Copyright 2015年4月25日 * created by txxs * all right reserved */ public class Composite implements Component { //构件容器 private ArrayList<Component> componentList = new ArrayList<Component>(); //添加构件 public void add(Component component){ this.componentList.add(component); } //删除构件 public void remove(Component component){ this.componentList.remove(component); } //获取子构件 public ArrayList<Component>getChild(){ return this.getChild(); } @Override public void operation() { //业务逻辑代码 } }
package com.zz.composite; /** * 定义叶子构件 * Copyright 2015年4月25日 * created by txxs * all right reserved */ public class Leaf implements Component { @Override public void operation() { //业务员逻辑代码 } }
1、调用简单,使用者不必关心自己处理的是单个对象还是组合对象。
2、灵活增加节点,想要增加树枝或者叶子节点只要需要找到父节点即可,不必为了增加对象部件而修改代码
组合模式适合的场景:
1、描述对象的部分和整体的等级结构。
2、当需要忽略个体部件和组合构件的区别时
原文地址:http://blog.csdn.net/maoyeqiu/article/details/45291097