1. 程式人生 > >《Java程式設計思想》第四版之內部類學習——神奇而又實用

《Java程式設計思想》第四版之內部類學習——神奇而又實用

//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";
		}
	}
}