java设计模式之组合模式

来源:互联网 发布:程序员工作心得体会 编辑:程序博客网 时间:2024/06/05 05:38

参考:http://blog.csdn.net/jason0539/article/details/22642281

  • 先看看组合模式的定义吧:“将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。”
    使用条件:一种行为/动作在一个地方做出,其它地方都会有同样的动作。如会员卡积分。在分店、加盟店、总店积分是相同的。
  • 设计:一个超类定义刷卡等方法,一个组合类(总店和分店组合,有list<>集合)继承超类并且在要求的“动作/行为”中,做list循环为list(所有)中类递归调用,不知道这属不属于递归,,一个叶子类继承超类,

“`
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
import java.util.ArrayList;
import java.util.List;

public class ComponentDemo {
public abstract class Component {
String name;

    public abstract void add(Component c);      public abstract void remove(Component c);      public abstract void eachChild();  }  // 组合部件类  public class Leaf extends Component {      // 叶子节点不具备添加的能力,所以不实现      @Override      public void add(Component c) {          // TODO Auto-generated method stub          System.out.println("");      }      // 叶子节点不具备添加的能力必然也不能删除      @Override      public void remove(Component c) {          // TODO Auto-generated method stub          System.out.println("");      }      // 叶子节点没有子节点所以显示自己的执行结果      @Override      public void eachChild() {          // TODO Auto-generated method stub          System.out.println(name + "执行了");      }  }  // 组合类  public class Composite extends Component {      // 用来保存节点的子节点      List<Component> list = new ArrayList<Component>();      // 添加节点 添加部件      @Override      public void add(Component c) {          // TODO Auto-generated method stub          list.add(c);      }      // 删除节点 删除部件      @Override      public void remove(Component c) {          // TODO Auto-generated method stub          list.remove(c);      }      // 遍历子节点      @Override      public void eachChild() {          // TODO Auto-generated method stub          System.out.println(name + "执行了");          for (Component c : list) {              c.eachChild();          }      }  }  public static void main(String[] args) {      ComponentDemo demo = new ComponentDemo();      // 构造根节点      Composite rootComposite = demo.new Composite();      rootComposite.name = "根节点";      // 左节点      Composite compositeLeft = demo.new Composite();      compositeLeft.name = "左节点";      // 构建右节点,添加两个叶子几点,也就是子部件      Composite compositeRight = demo.new Composite();      compositeRight.name = "右节点";      **Leaf leaf1** = demo.new Leaf();      leaf1.name = "右-子节点1";      **Leaf leaf2** = demo.new Leaf();      leaf2.name = "右-子节点2";      compositeRight.add(leaf1);      compositeRight.add(leaf2);      // 左右节点加入 根节点      rootComposite.add(compositeRight);      rootComposite.add(compositeLeft);      // 遍历组合部件      rootComposite.eachChild();  }  

}
“`这里写图片描述