トップページ > コンテンツ > プログラミング効率化 > プログラムを作る上での考え方 > デザインパターン > Composite

■メリット
親要素と子要素を共通のインタフェースにまとめることで、
再帰処理を行わせる時に要素を区別させる必要がなくなる。

■実装例
/*User.java*/
public class User {
    public static void main(String[] args) {
        ParentComposite comp1 = new ParentComposite();
        ParentComposite comp2 = new ParentComposite();
        ChildComposite comp3 = new ChildComposite();
        comp1.add(comp2);
        comp1.add(comp3);
        comp1.method(); //自分自身(comp1)と子要素comp2と孫要素comp3の分を出力する
    }
}

/*CommonInterface.java*/
 interface CommonInterface {
     void method();
 }

/*ParentComposite.java*/
 public class ParentComposite implements CommonInterface{
    private List<CommonInterface> list = new ArrayList<CommonInterface>();

    //再帰的な関数
    public void method() {
        System.out.println("Composite1です");
        for(CommonInterface item: list) {
            item.method();
        }
    }
    //子要素の追加等。自分と子を区別しないようにインタフェースを引数に
    public void add(CommonInterface composition) {
        list.add(composition);
    }
}

/*ChildComposite.java*/
 public class ChildComposite implements CommonInterface{
    public void method() {
        System.out.println("Composite2です");
    }
}
最終更新:2021年07月09日 19:30