Não sei se foi muito overengineering, mas eu conseguir arrumar uma forma de não ter que digitar a checagem se está ligado ou não, toda vez que criar uma nova classe de dispositivos.
(não utilizei interface nesse exercício)
Classe ToggleDevice
package com.vikinhd.Classes;
public abstract class ToggleDevice {
protected boolean State;
public ToggleDevice() {
State = false;
}
protected boolean isSameState(boolean newState) {
return (State == newState);
}
public void toggle(boolean newState) {
if (isSameState(newState)) {
System.out.println("Has same state.");
} else {
if (newState){
on();
State = true;
} else{
off();
State = false;
}
}
}
protected abstract void on();
protected abstract void off();
}
Classe Light
package com.vikinhd.Classes;
public class Light extends ToggleDevice{
public Light() {
super();
}
@Override
public void on() {
System.out.println("Turned lights on.");
}
@Override
public void off() {
System.out.println("Turned lights off.");
}
}
Classe AirConditioner
package com.vikinhd.Classes;
public class AirConditioner extends ToggleDevice{
public AirConditioner() {
super();
}
@Override
protected void on() {
System.out.println("Turned air on.");
}
@Override
protected void off() {
System.out.println("Turned air off.");
}
}