【デザインパターン】Compositeパターン

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メソッドをオーバーライドして作成します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください