我正在制作一个角色扮演游戏,以便练习设计模式。我希望玩家能够将自己变成不同的动物。例如,德鲁伊可能能够变成一只猎豹。目前我打算使用装饰者模式来实现这一点,但我的问题是:如何使得当德鲁伊处于猎豹形态时,他们只能访问猎豹的技能?换句话说,他们不应该能够访问普通德鲁伊的技能。
使用装饰者模式,即使在猎豹形态下,我的德鲁伊仍然可以访问他们的普通德鲁伊技能。
class Druid : Character
{
// many cool druid skills and spells
void LightHeal(Character target) { }
}
abstract class CharacterDecorator : Character
{
Character DecoratedCharacter;
}
class CheetahForm : CharacterDecorator
{
Character DecoratedCharacter;
public CheetahForm(Character decoratedCharacter)
{
DecoratedCharacter= decoratedCharacter;
}
// many cool cheetah related skills
void CheetahRun()
{
// let player move very fast
}
}
现在使用这些类
Druid myDruid = new Druid();
myDruid.LightHeal(myDruid); // casting light heal here is fine
myDruid = new CheetahForm(myDruid);
myDruid.LightHeal(myDruid); // casting here should not be allowed
嗯……现在我想起来了,如果不将该类向下转换,我的德鲁伊是否将无法使用Druid
类的法术/技能?但即使是这种情况,是否有更好的方法确保此时的myDruid
被锁定在所有Druid
相关的法术/技能之外,直到它被重新转换为Druid
(因为目前它处于CheetahForm
状态)?