《Java程式設計思想》第四版之內部類學習——神奇而又實用
阿新 • • 發佈:2018-12-26
//210頁
public class GreenhouseControls extends Controller{
private boolean light=false;
public class LightOn extends Event{//開燈,內部類繼承了Event事件,建立時呼叫Event事件初始化
public LightOn(long dealyTime){
super(dealyTime);
}
public void action(){//執行開燈操作
light=true;
}
public String toString(){//輸出開燈資訊
return "Light is on";
}
}
public class LightOff extends Event{//關燈
public LightOff(long dealyTime){
super(dealyTime);
}
public void action(){//執行關燈操作
light=false;
}
public String toString(){//輸出關燈資訊
return "Light is Off";
}
}
private boolean water=false;
public class WaterOn extends Event{//開水龍頭
public WaterOn(long dealyTime){
super(dealyTime);
}
public void action(){//執行開水頭操作
water=true;
}
public String toString(){
return "Greenhouse water is on";
}
}
public class WaterOff extends Event{//關水龍頭
public WaterOff(long dealyTime){
super(dealyTime);
}
public void action(){//執行關水龍頭操作
water=false;
}
public String toString(){
return "Greenhouse water is off";
}
}
private String thermostat="Day";
public class ThermostatNight extends Event{//夜晚
public ThermostatNight(long delayTime){
super(delayTime);
}
public void action(){//執行夜晚操作
thermostat="Night";
}
public String toString(){
return "ThermostatDay on night setting";
}
}
public class ThermostatDay extends Event{//白天
public ThermostatDay(long delayTime){
super(delayTime);
}
public void action(){//執行白天操作
thermostat="Day";
}
public String toString(){
return "ThermostatDay on day setting";
}
}
public class Bell extends Event{//響鈴
public Bell(long delayTime){
super(delayTime);
}
public void action(){
addEvent(new Bell(delayTime));
}
public String toString(){//執行響鈴操作
return "Bing!";
}
}
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);
}
public void action(){//執行重新啟動系統操作:將本物件Event陣列中物件重新新增到控制框架中
for(Event e:eventList){
e.start();//每個事件重新啟動,重新獲取當前時間
addEvent(e);//每個事件新增到控制事件中
}
this.start();//重新啟動系統事件也要重新獲取當前時間
addEvent(this);//重新啟動系統事件新增至控制事件中
}
public String toString(){
return "Restarting system";
}
}
public static class Terminate extends Event{//關閉系統
public Terminate(long delayTime){
super(delayTime);
}
public void action(){//關閉系統操作
System.exit(0);
}
public String toString(){
return "Terminating";
}
}
}