設計模式:組合模式(Composite Pattern)
阿新 • • 發佈:2019-01-12
import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; /** * 組合模式。 * @author Bright Lee */ public class CompositePattern { public static void main(String[] args) { Component root = new Composite(); Component leaf = new Leaf(); root.add(leaf); root.operation(); } } /** * Component為組合中的所有物件定義一個介面,不管是組合還是葉節點。 */ interface Component { void operation(); void add(Component component); void remove(Component component); List<Component> getChildren(); } /** * 組合。 */ class Composite implements Component { private LinkedHashMap<Component, Component> childrenMap = new LinkedHashMap<Component, Component>(); public void operation() { System.out.println("我是一個Composite,我的子節點是:"); List<Component> children = getChildren(); for (Component child : children) { child.operation(); } } public void add(Component component) { childrenMap.put(component, component); } public void remove(Component component) { childrenMap.remove(component); } public List<Component> getChildren() { List<Component> list = new ArrayList<Component>(childrenMap.values()); return list; } } /** * 葉子節點。 */ class Leaf implements Component { public void operation() { System.out.println("我是一個Leaf。"); } public void add(Component component) { } public void remove(Component component) { } public List<Component> getChildren() { List<Component> list = new ArrayList<Component>(0); return list; } }
執行結果:
我是一個Composite,我的子節點是:
我是一個Leaf。