Java 用户装饰器私有属性设置为0.0

Java 用户装饰器私有属性设置为0.0,java,decorator,abstract,Java,Decorator,Abstract,我在学装饰图案。这是一个非常简单的角色设计,应该能够装备不同的对象。当角色的所有属性都设置为0时,问题就会出现 public abstract class Character{ private double damage; public Character(); public void setDamage(damage){ this.damage = damage; } public double getDamage(){return d

我在学装饰图案。这是一个非常简单的角色设计,应该能够装备不同的对象。当角色的所有属性都设置为0时,问题就会出现

public abstract class Character{
    private double damage;
    public Character();
    public void setDamage(damage){
         this.damage = damage;
    }
    public double getDamage(){return damage;}

}


public class Human extends Character{
    public Human(){
        damage = 10.00;
    }
}


public abstract class Object extends Character{
    public abstract String getDescription();
}


public class Sword extends Object{
    Character character;

    public Sword(Character character){
        this.character = character;
        updateDamage();
    }
    public String getDescription(){
          // Something
    }

    public void updateDamage(){
         character.setDamage(character.getDamage() + 2.00);
    }
}
这是一个简单的输出

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
为什么会这样?对于这一点,有没有比decorator模式更好的实现方式?

下面一行:

new Sword(test);
不会设置剑类物品的伤害,但会设置来自测试(人类)的物品的伤害。剑术构造器将调用不设置伤害字段的UpdateImage方法

要使此代码正常工作,应将UpdatedImage方法更改为:

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