OnJava8-Examples/innerclasses/GreenhouseControls.java

127 lines
3.4 KiB
Java
Raw Normal View History

2015-04-20 15:36:01 -07:00
//: innerclasses/GreenhouseControls.java
// This produces a specific application of the
// control system, all in a single class. Inner
// classes allow you to encapsulate different
// functionality for each type of event.
import innerclasses.controller.*;
public class GreenhouseControls extends Controller {
private boolean light = false;
public class LightOn extends Event {
public LightOn(long delayTime) { super(delayTime); }
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public void action() {
// Put hardware control code here to
// physically turn on the light.
light = true;
}
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public String toString() { return "Light is on"; }
2015-05-18 23:05:20 -07:00
}
2015-04-20 15:36:01 -07:00
public class LightOff extends Event {
public LightOff(long delayTime) { super(delayTime); }
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public void action() {
// Put hardware control code here to
// physically turn off the light.
light = false;
}
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public String toString() { return "Light is off"; }
}
private boolean water = false;
public class WaterOn extends Event {
public WaterOn(long delayTime) { super(delayTime); }
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public void action() {
// Put hardware control code here.
water = true;
}
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public String toString() {
return "Greenhouse water is on";
}
2015-05-18 23:05:20 -07:00
}
2015-04-20 15:36:01 -07:00
public class WaterOff extends Event {
public WaterOff(long delayTime) { super(delayTime); }
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public void action() {
// Put hardware control code here.
water = false;
}
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public String toString() {
return "Greenhouse water is off";
}
}
2015-05-18 23:05:20 -07:00
private String thermostat = "Day";
2015-04-20 15:36:01 -07:00
public class ThermostatNight extends Event {
public ThermostatNight(long delayTime) {
super(delayTime);
}
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public void action() {
// Put hardware control code here.
thermostat = "Night";
}
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public String toString() {
return "Thermostat on night setting";
}
2015-05-18 23:05:20 -07:00
}
2015-04-20 15:36:01 -07:00
public class ThermostatDay extends Event {
public ThermostatDay(long delayTime) {
super(delayTime);
}
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public void action() {
// Put hardware control code here.
thermostat = "Day";
}
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public String toString() {
return "Thermostat on day setting";
}
}
// An example of an action() that inserts a
// new one of itself into the event list:
public class Bell extends Event {
public Bell(long delayTime) { super(delayTime); }
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public void action() {
addEvent(new Bell(delayTime));
}
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public String toString() { return "Bing!"; }
2015-05-18 23:05:20 -07:00
}
2015-04-20 15:36:01 -07:00
public class Restart extends Event {
private Event[] eventList;
public Restart(long delayTime, Event[] eventList) {
super(delayTime);
this.eventList = eventList;
for(Event e : eventList)
addEvent(e);
}
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public void action() {
for(Event e : eventList) {
e.start(); // Rerun each event
addEvent(e);
}
start(); // Rerun this Event
addEvent(this);
}
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public String toString() {
return "Restarting system";
}
2015-05-18 23:05:20 -07:00
}
2015-04-20 15:36:01 -07:00
public static class Terminate extends Event {
public Terminate(long delayTime) { super(delayTime); }
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public void action() { System.exit(0); }
2015-05-05 11:20:13 -07:00
@Override
2015-04-20 15:36:01 -07:00
public String toString() { return "Terminating"; }
}
} ///:~