我正在尝试学习装饰模式。这是一个非常简单的角色设计,应该能够装备不同的物体。当角色的所有属性都设置为0时,问题就出现了。
public class Main{
public static void main(String[] args){
Character test = new Human();
System.out.printl(test.getDamage());
test = new Sword(test);
System.out.printl(test.getDamage());
}
// OUTPUT
10.0
0.0
这是一个简单的输出。
<TryitProxyError xmlns:h="http://wso2.org/ns/TryitProxy" h:status="SOAP envelope error">org.apache.axis2.AxisFault: Transport error: 412 Error: Precondition Failed</TryitProxyError>
为什么会这样?有没有比装饰器模式更好的实现呢?
答案 0 :(得分:0)
以下一行:
new Sword(test);
不会设置剑对象的伤害,而是来自测试(人)装饰的那个。 Sword构造函数将调用不设置损坏字段的updateDamage方法。
要使此代码正常工作,您应该从Sword更改updateDamage方法:
public void updateDamage(){
setDamage(character.getDamage() + 2.00);
}