Compositeパターンのサンプルコードです。
package org.example.composite;
public abstract class Component {
public abstract void method1();
public abstract void method2();
protected void add(Component component){}
}
package org.example.composite;
public class Leaf extends Component{
@Override
public void method1() {
}
@Override
public void method2() {
}
}
package org.example.composite;
import java.util.ArrayList;
import java.util.List;
public class Composite extends Component{
private List<Component> ComponentList = new ArrayList<>();
@Override
public void method1() {
}
@Override
public void method2() {
}
@Override
public void add(Component component) {
ComponentList.add(component);
}
}
package org.example.composite;
public class Main {
public static void main(String[] args) {
Component parent1 = new Composite();
Component parent2 = new Composite();
Component leaf1 = new Leaf();
Component leaf2 = new Leaf();
parent2.add(leaf1);
parent2.add(leaf2);
parent1.add(parent2);
}
}
Compositeパターンは木構造を構成してオブジェクトを管理し、再帰的に使用したい場合に使用します。
Compositeクラスが木構造の親クラス、Leafクラスが木構造の末端のクラスです。どちらもComponentクラスを継承します。
Leafクラスでも使用するため、Componentクラスのaddメソッドはprotectedの処理無しで作成します。
実際に追加する処理はCompositeクラスのaddメソッドをオーバーライドして作成します。