3

HeadFirst DeginPatternの本で、デコレータパターンは構成関係を使用してオブジェクトに追加機能を動的に提供することを読みました。しかし、次のコードでは、合成ではなく集約関係が見つかりました。

私の知る限り、構成と集計の違いは次のとおりです。

集約 :集約されたオブジェクトの寿命または存在は互いに独立していますが、一方のオブジェクトは他方のオブジェクトの所有者の役割を果たしています。

構成 :複合オブジェクトの寿命または存在は、コンテナー オブジェクトの存在に依存します。複合オブジェクトの存在は、そのコンテナー オブジェクトなしでは意味がありません。

public abstract class Girl {

    String description = "no particular";

    public String getDescription(){
        return description;
    }
}

public class AmericanGirl extends Girl {

    public AmericanGirl(){
        description = "+American";
    }
}

public class EuropeanGirl extends Girl {

    public EuropeanGirl() {
        description = "+European";
    }
}

public abstract class GirlDecorator extends Girl {

    public abstract String getDescription();
}

public class Science extends GirlDecorator {

    private Girl girl;

    public Science(Girl g) {
        girl = g;
    }

    @Override
    public String getDescription() {
        return girl.getDescription() + "+Like Science";
    }

    public void caltulateStuff() {
        System.out.println("scientific calculation!");
    }
}

public class Main {

    public static void main(String[] args) {
        Girl g1 = new AmericanGirl();
        System.out.println(g1.getDescription()); 
        Science g2 = new Science(g1);
        System.out.println(g2.getDescription());        
    }
}

誰かが上記のコードが構成に従う方法を指摘/説明できますか?

4

1 に答える 1