ConditionallyMovableVehicle.java
/**
* Utfärdat av Durim Miziraj
* Kontakt: gusmizdu@student.gu.se
*/
package lab3;
import java.awt.Color;
import java.awt.geom.Point2D;
import static org.apache.commons.lang3.Validate.isTrue;
import static org.apache.commons.lang3.Validate.finite;
abstract class ConditionallyMovableVehicle extends Vehicle {
public ConditionallyMovableVehicle (
final int nrDoors,
final double enginePower,
final Color color,
final String modelName,
final Point2D point
) { super(nrDoors, enginePower, color, modelName, point); }
protected abstract boolean canMove();
@Override
public void move() { if (canMove()) super.move(); }
private static void validate(double d) {
isTrue(d >= 0.0d);
finite(d);
}
@Override
public void gas(final double speedIncrease) {
validate(speedIncrease);
if (canMove()) super.gas(speedIncrease);
}
protected abstract double speedFactor();
@Override
protected double increasedSpeedFactor(final double increase) {
validate(increase);
return getCurrentSpeed() + speedFactor() * increase;
}
@Override
protected double decreasedSpeedFactor(final double decrease) {
validate(decrease);
return getCurrentSpeed() - speedFactor() * decrease;
}
}