Java调用装饰器方法实现宝可梦buff效果不生效问题咨询
问题根因
- 核心错误出现在
generateRandomPokemon的循环调用逻辑:Java属于值传递语言,调用addRandomBuff(randP)时,方法形参p是实参randP的副本,方法内部将p赋值为装饰器实例的操作,只会修改形参的指向,完全不会影响外部的randP变量,装饰后的实例没有被保留,自然看不到任何buff效果。 - 你当前的
addRandomBuff方法实现本身符合语法和装饰器设计逻辑,之前尝试其他写法触发的编译报错,属于错误尝试方向导致的问题,不需要调整该方法的实现。
修复方案
仅需修改generateRandomPokemon中的循环代码,接收addRandomBuff的返回值并重新赋值给randP即可,不需要修改任何方法定义、参数,完全符合项目UML设计要求:
for(int x = 1; x < level; x++){ randP = addRandomBuff(randP); }
生效逻辑说明
addRandomBuff返回的是被AttackUp/HpUp装饰后的新Pokemon实例,将该实例重新赋值给randP后,后续调用randP.getName()、randP.getHp()等方法时,会优先调用最外层装饰器的对应实现,即可正常显示+ATK/+HP的名称后缀,以及对应的属性加成效果。
内容的提问来源于stack exchange,提问作者Nimtheria
相关产品推荐
相关产品推荐

