世界上並沒有完美的程序,但我們並不因此而沮喪,因爲寫程序就是一個不斷追求完美的過程。
- 意圖
保證客戶端調用單對象與組合對象的一致性。適用:具有相同功能的樹形母子機構。 - 類圖
- 實例
public interface Component {
void sayHello();
}
class Leaf implements Component{
private String name;
public Leaf(String name){
this.name = name;
}
@Override
public void sayHello() {
System.out.println(name);
}
}
class Composite implements Component{
private String name;
public Composite(String name){
this.name = name;
}
List<Component> componentList = new ArrayList<>();
@Override
public void sayHello() {
System.out.println(name);
}
public void addPart(Component component){
componentList.add(component);
}
}
- 測試
class TestClass{
public static void main(String[] args){
Composite composite = new Composite("總部");
Composite part1 = new Composite("分部1");
part1.addPart(new Leaf("小分部1"));
composite.addPart(part1);
composite.addPart(new Leaf("分部2"));
composite.addPart(new Leaf("分部3"));
composite.sayHello();
composite.componentList.forEach(
component -> {
component.sayHello();
if(component instanceof Composite){
((Composite) component).componentList.forEach(Component::sayHello);
}
}
);
}
}
運行結果:
總部
分部1
小分部1
分部2
分部3