設計模式(十六)組合模式
阿新 • • 發佈:2018-11-13
組合模式:將物件組合成樹形結構表示“部分-整體”的層次結構。組合模式使得使用者對單個物件和組合物件使用具有一致性
public abstract class Component { protected String name; public Component(String name) { this.name = name; } public abstract void add(Component c); public abstract void remove(Component c); public abstract void display(); } public class Leaf extends Component { public Leaf(String name) { super(name); } @Override public void add(Component c) { System.out.println("葉子節點不能在增加分支和樹葉了"); } @Override public void remove(Component c) { System.out.println("葉子節點沒有可以刪除的了"); } @Override public void display() { System.out.println("---"+name); } } 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() { System.out.println("-"+name); for (Component c:children) { c.display(); } } } public class Main { public static void main(String[] args) { Composite root=new Composite("root"); root.add(new Leaf("A")); root.add(new 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.display(); } }
何時使用組合模式:
需求中體現部分與整體的結構時,以及希望使用者可以忽略組合物件與單個物件的不同,統一地使用組合結構中的所有物件時,就應該考慮使用組合模式了