我正在为我的学习开展RPG游戏,我们需要使用设计模式,我正在尝试编写动态角色技能。例如,我会有一些物品,当装备时,添加角色之前没有的新技能(治愈......)。
为此,我想使用装饰器模式,但是使用这个模式,我们不能向类中添加方法或属性,只需修改那些已存在的模式,对吧?
那么有一种动态的方法吗?
答案 0 :(得分:1)
那里有很多模式;你的老师要求特定模式或模式组吗?而且,模式有时候是有意义的。只有当它们有助于解决问题时才使用它们,而不是因为它们很酷。
在这种情况下,可以使用装饰器 。在编写时,它们不应该添加外部方法或属性。因此,即使是裸体角色,您也需要getHealingPower()
,getArmorValue()
等等;并且每个包装的装饰器都会修改它关注的事物的返回值:HealingBookDecorator
将返回wrappedObject.getHealingPower() + 15
。然而,我发现这个场景非常难看,因为角色无法移除治疗书以将其留在地板上,或者拿起更好的书。装饰物通常不知道他们的装饰者。另外,如果你的角色被命名为bob
,那么使用StripedShirtDecorator(RedScarfDecorator(PolkaDotTrousersDecorator(bob)))
给他打扮是很奇怪的。
如果我必须实施此操作,则每个Item
都会有String description
并包含Map<Stat, Integer> modifiers
(其中Stat
是enum
有效统计信息,如治疗,护甲值,最大HP等等)。 Character
会有ArrayList<Item> inventory
,Map<Stat, Integer> baseStats
他或她的基本统计信息,而另一个Map<Stat, Integer> currentStats
会包含合并baseStats
和{{modifiers
的结果1}}每个Item
在角色的广告资源中,每次角色升级或添加或删除其广告资源中的内容时都需要更新。
要检查名为Stat.MusicProficiency
的{{1}}中Character
的级别,您需要编写lisaSimpson
。这样做的好处是可以很容易地添加新类型的项目(它们将是对象实例,而不是类),并且库存管理将大大简化。