2016-12-27 6 views
0

私はデコレータパターンを学習しようとしています。ここには、本当にシンプルなキャラクターデザインがあります。これは、さまざまなオブジェクトをイートすることができるはずです。この問題は、文字のすべての属性が0に設定されているときに発生します。パテントデコレータのプライベート属性を0.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 

どうしてですか?これはデコレータのパターンよりも優れた実装ですか?

答えて

0

次の行:

new Sword(test); 

は、剣オブジェクトの損傷はなく飾らテスト(ヒト)から1を設定しません。 Swordコンストラクタはdamageフィールドを設定しないupdateDamageメソッドを呼び出します。

は、このコードの作業を行うには、剣からupdateDamage方法を変更する必要があります。

public void updateDamage(){ 
    setDamage(character.getDamage() + 2.00); 
} 
関連する問題