Patron decorator私有属性设置为0.0

时间:2016-12-27 13:46:02

标签: java decorator abstract

我正在尝试学习装饰模式。这是一个非常简单的角色设计,应该能够装备不同的物体。当角色的所有属性都设置为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>

为什么会这样?有没有比装饰器模式更好的实现呢?

1 个答案:

答案 0 :(得分:0)

以下一行:

new Sword(test);

不会设置剑对象的伤害,而是来自测试(人)装饰的那个。 Sword构造函数将调用不设置损坏字段的updateDamage方法。

要使此代码正常工作,您应该从Sword更改updateDamage方法:

public void updateDamage(){
     setDamage(character.getDamage() + 2.00);
}