
222
6
章
シーリングファンにアンドゥを追加する
public class CeilingFanHighCommand implements Command {
CeilingFan ceilingFan;
int prevSpeed;
public CeilingFanHighCommand(CeilingFan ceilingFan) {
this.ceilingFan = ceilingFan;
}
public void execute() {
prevSpeed = ceilingFan.getSpeed();
ceilingFan.high();
}
public void undo() {
if (prevSpeed == CeilingFan.HIGH) {
ceilingFan.high();
} else if (prevSpeed == CeilingFan.MEDIUM) {
ceilingFan.medium();
} else if (prevSpeed == CeilingFan.LOW) {
ceilingFan.low();
} else if (prevSpeed == CeilingFan.OFF) {
ceilingFan.off();
}
}
}
ファンの変更前の強さを記録
するためのローカルな状態を
追加しました。
execute()
メソッドでは、この
動作を元に戻す必要があるとき
に備え、ファンの強さを変える
前に、まず変更前の状態を記録
する必要があります。 ...