在以下表示用于设计游戏角色场景的装饰器模式的 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 中的“包裹”对象将指向“Knight”,Armor 中的“包裹”对象将指向 DefensiveSpell。另外,当执行 milo.Defend() 代码时,我相信在 Armor 中会调用 Defend() 方法,该方法将调用 DefensiveSpell 的 Defend() ,而后者又会调用骑士的 Defend() ,最终执行一些防御动作。这是我到目前为止的图表: