ゲームキャラクターのシナリオを設計するためのデコレータパターンを表す次のUMLダイアグラムでは、次のコードを実行すると、オブジェクトはヒープ内でどのように表示されますか?
GameCharacter milo;
milo = new Armour (new DefensiveSpell(new Knight()));
milo.Defend();
また、上記のコードは次のコードと同じですか。
GameCharacter milo;
milo = new Knight();
milo = new DefensiveSpell(milo);
milo = new Armour(milo);
milo.Defend();
Knightオブジェクトは、「milo」オブジェクトが指すヒープ上に最初に作成されると思います。次に、DefensiveSpellとArmorが作成されます。DefensiveSpellの「wrapped」オブジェクトは「Knight」を指し、Armorの「wrapped」オブジェクトはDefensiveSpellを指します。また、milo.Defend()コードが実行されると、Defend()メソッドがArmorで呼び出され、DefensiveSpellのDefend()が呼び出され、最終的に何らかの防御アクションを実行する騎士のDefend()が呼び出されると思います。これが私がこれまでに持っている図です: