设计模式之组合模式 Composite
Posted 大白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之组合模式 Composite相关的知识,希望对你有一定的参考价值。
代码实现
//Component(抽象构件):抽象构件中定义了叶子和容器构件的共同点。比如,有公共的添加删除叶子功能,有显示节点功能。 public abstract class Component { protected String name; public Component(String name) { super(); this.name = name; } public abstract void add(Component c); public abstract void remove(Component c); public abstract void display(int depth); }
//表示该节点下面没有其他子节点了,就称为叶子 public class Leaf extends Component { public Leaf(String name) { super(name); } @Override public void add(Component c) { System.out.println("leaf no add"); } @Override public void remove(Component c) { System.out.println("leaf no remove"); } @Override public void display(int depth) { StringBuffer sb = new StringBuffer("-"); for (int i = 0; i <= depth; i++) { sb.append("-"); } System.out.println(sb.toString()+name); } }
//容器构件,该节点下还有其他子节点,理解为一个容器,里面包含了其他子节点。就叫做容器构件 public class Composite extends Component{ private List<Component> children = new ArrayList<Component>(); public Composite(String name) { super(name); } @Override public void add(Component c) { children.add(c); } @Override public void remove(Component c) { children.remove(c); } @Override public void display(int depth) { StringBuffer sb = new StringBuffer("-"); for (int i = 0; i <= depth; i++) { sb.append("-"); } System.out.println(sb.toString()+name); for (Component com : children) { com.display(depth + 2); } } }
public static void main(String[] args) { Composite root = new Composite("root"); root.add(new Leaf("Leaf A")); root.add(new Leaf("Leaf B")); Composite comp = new Composite("Composite X"); comp.add(new Leaf("Leaf XA")); comp.add(new Leaf("Leaf XB")); root.add(comp); Composite comp2 = new Composite("Composite XY"); comp2.add(new Leaf("Leaf XYA")); comp2.add(new Leaf("Leaf XYB")); comp.add(comp2); root.add(new Leaf("Leaf C")); Leaf leaf = new Leaf("Leaf D"); root.add(leaf); // root.remove(leaf);//这里可以删除某节点 root.display(1); }
---root -----Leaf A -----Leaf B -----Composite X -------Leaf XA -------Leaf XB -------Composite XY ---------Leaf XYA ---------Leaf XYB -----Leaf C -----Leaf D
以上是关于设计模式之组合模式 Composite的主要内容,如果未能解决你的问题,请参考以下文章
JAVA SCRIPT设计模式--结构型--设计模式之Composite组合模式