i have - ワーカーインターフェイス 各作業員にエネルギーがあります。JAVAのデコレータパターンの問題
public interface Worker {
int work();
double getEnergy();
}
及び - をワーカーインタフェースを実装することjuniorWorkerクラス。 ジュニアワーカーは100エネルギーを持っています。
public class juniorWorker implements Worker {
public int work() {
return (int) getEnergy();
}
public double getEnergy() {
return 100;
}
}
もが持っている - efficientWork、はワーカーインタフェースを実装powerWorkクラスを。 efficientWorkはエネルギーを20%削減します。 powerWorkはエネルギーを10%上げます。
public class efficientWork implements Worker {
private Worker worker;
public efficientWork(Worker w) {
this.worker=w;
}
public int work() {
return (int) (worker.getEnergy()*getEnergy());
}
public double getEnergy() {
return 0.8;
}
}
public class PowerWork implements Worker {
private Worker worker;
public PowerWork(Worker w) {
this.worker=w;
}
public int work() {
return (int) (worker.getEnergy()*getEnergy());
}
public double getEnergy() {
return 1.1;
}
}
実は、私はint型の仕事をしようとしています()は、各労働者が過ごすことになります総エネルギーを合計します。 例えば、私のデモクラス:
public class Demo {
public static void main(String[] args) {
Worker j= new efficientWork(new juniorWorker());
System.out.println(j.work());
}
}
この場合はを働いている - システムは、を印刷します。
しかし、この例で、常に0を印刷:
public class Demo {
public static void main(String[] args) {
Worker j= new efficientWork(new PowerWork(new juniorWorker()));
System.out.println(j.work());
}
}
ヘルプ?私は88を得ることを期待しています! (110 * 0.8)
なぜあなたは労働者を実装するすべてのクラスに作業員オブジェクトを渡しているように展開? – Joey
私は88を得ることを期待しています! (110 * 0.8) – MoZZ
@HovercraftFullOfEelsはもう少し説明しました。 – MoZZ