package liu.composite.demo;
public abstract class Component {
public String name;
public Component(String name){ this.name = name; } public Component(){ } public abstract void add(Component c); public abstract void remove(Component c); public abstract void display(int depth); } ----------------------------- package liu.composite.demo;
import java.util.ArrayList;
import java.util.Iterator; import java.util.List;
public class Composite extends Component {
public Composite(String name){
super(name); } private List<Component> children = new ArrayList<Component>(); @Override public void add(Component c) { children.add(c); }
@Override
public void remove(Component c) { children.remove(c); }
@Override
public void display(int depth) { for(int i = 0 ;i<depth;i++) System.out.print("-"); System.out.println(name); for(Iterator tmp = children.iterator();tmp.hasNext();){ ((Component) tmp.next()).display(depth+2); //System.out.println(); } }
}
--------------------------- package liu.composite.demo;
public class Leaf extends Component {
public Leaf(String name){
super(name); } @Override public void add(Component c) { System.out.println("can not add to a leaf"); }
@Override
public void remove(Component c) { System.out.println("can remove from a leaf"); }
@Override
public void display(int depth) { for(int i = 0 ;i<depth;i++) System.out.print("-"); System.out.println(name); }
}
---------------------------------- package liu.composite.demo;
public class Main {
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); }
}
|
设计模式之组合模式,component
最新推荐文章于 2024-01-09 20:25:09 发布