Java 用户装饰器私有属性设置为0.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
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);
}