Java设计模式之组合模式

来源:互联网 发布:网上投票系统 源码 编辑:程序博客网 时间:2024/06/17 15:28

组合模式(composite)

概念:将对象组合成树形结构以表示”部分-整体”的层次结构。”Composite”使得用户对单个对象和组合对象的使用具有一致性
适用:
1.想用部分-整体结构层次。
2.希望用户忽略组合对象与单个对象的不同,用户将统一的使用组合结构中的所有对象。
这里写图片描述

示例代码:

/** *Component接口 */public abstract class Component{    String name;      public abstract void add(Component c);      public abstract void remove(Component c);      public abstract void eachChild(); }
/** * 定义有子节点的行为,用来存储子部件,在Component接口中实现与子部件有关的操作 */public class Composite extends Component{    // 用来保存节点的子节点      List<Component> list = new ArrayList<Component>();      // 添加节点 添加部件      public void add(Component c) {          list.add(c);      }      // 删除节点 删除部件      public void remove(Component c) {           list.remove(c);      }      // 遍历子节点      public void eachChild() {            System.out.println(name + "执行了");          for (Component c : list) {              c.eachChild();          }      }  }
/** * 在组合中表示叶节点对象,叶节点没有子节点 */public class Leaf extends Component{    // 叶子节点不具备添加的能力,所以不实现      public void add(Component c) {          System.out.println("");      }      // 叶子节点不具备添加的能力必然也不能实现    public void remove(Component c) {           System.out.println("");      }      // 叶子节点没有子节点所以显示自己的执行结果      public void eachChild() {          System.out.println(name + "执行了");      }  }
/** * 组合模式的测试 * 将对象组合成树形结构以表示"部分-整体"的层次结构。"Composite"使得用户对单个对象和组合对象的使用具有一致性 */public class Test {    public static void main(String[] args) {         // 构造根节点          Composite rootComposite = new Composite();          rootComposite.name = "根节点";          // 左节点          Composite compositeLeft = new Composite();          compositeLeft.name = "左节点";          // 构建右节点,添加两个叶子几点,也就是子部件          Composite compositeRight = new Composite();          compositeRight.name = "右节点";          Leaf leaf1 = new Leaf();          leaf1.name = "右-子节点1";          Leaf leaf2 = new Leaf();          leaf2.name = "右-子节点2";          compositeRight.add(leaf1);          compositeRight.add(leaf2);          // 左右节点加入 根节点          rootComposite.add(compositeRight);          rootComposite.add(compositeLeft);          // 遍历组合部件          rootComposite.eachChild();     }}
原创粉丝点击