【JAVA設計模式】9.組合模式
阿新 • • 發佈:2018-12-11
目錄即是最經典的組合模式實踐,一個物件由多個物件(可以是自身型別)組合而成,形成一個複雜的物件
UML圖:
首先定義一個總介面,用於定義所有元件,所有元件都實現該介面:
interface IComponent {
void operation();
void add(IComponent c);
void remove(IComponent c);
IComponent getChild(int i);
}
一個實現該介面的元件,其內部有多個實現IComponent的物件,提供了自身操作方法以及操作內部物件的方法:
class Component implements IComponent { private List<IComponent> components = new ArrayList<>(); private String name; public Component(String name) { this.name = name; } @Override public void operation() { System.out.println("I am a component " + name); for (IComponent c : components) { c.operation(); } } @Override public void add(IComponent c) { components.add(c); } @Override public void remove(IComponent c) { components.remove(c); } @Override public IComponent getChild(int i) { return components.get(i); } }
在客戶端中通過呼叫add和remove方法對component中的components列表進行修改,從而生成一個樹狀的結構:
IComponent component1 = new Component("1"); component1.add(new Leaf("1")); component1.add(new Leaf("2")); IComponent component2 = new Component("2"); component2.add(new Leaf("3")); component2.add(new Leaf("4")); component2.add(component1); component2.operation();