📄 timer.java
字号:
package myoven.timer;
import java.util.*;
public class Timer implements Runnable{
Vector Observers_TimerOn; //预定者计时开始事件的观察者集合
Vector Observers_TimerOff; //预定者计时结束事件的观察者集合
Vector Observers_TimerExpired; //预定者计时开始事件的观察者集合
private int time_remaining;
private static Timer instance;
Thread timeThread;//计时线程
final int TIMEINTERVAL=100;//计时单位
boolean isOn;//标志自身计时状态 isOn=true;为计时器处于工作状态
boolean isOk;
//用于判断外界条件(比如门的闭和与否,可以扩展到其他外界条件)是否允许计时器计时,一旦计时即微波炉处于正常工作状态.
//比如在此例中用来对门是否关闭,门关闭,将set IsOk=true; or门打开 set IsOk=false;
public static Timer getInstance(){
if(instance==null)
instance=new Timer();
return instance;
}
public Timer() {
Observers_TimerOn=new Vector();
Observers_TimerOff=new Vector();
Observers_TimerExpired=new Vector();
time_remaining=0;
isOn=false;
isOk=true;//在此例中,初始时门处于关闭条件,对于timer来说运行之外部条件成立,所以=true;
}
public int getTime_remaining(){
return time_remaining;
}
public boolean getIsOn(){
return isOn;
}
public boolean getIsOk(){
return isOk;
}
public void setIsOk(boolean isOk){
this.isOk=isOk;
}
/*
public void setIsOn(boolean isOn){
this.isOn=isOn;
}
*/
public void start() {
if (timeThread == null) {
timeThread = new Thread(this);
timeThread.start();
System.out.println("timeThread == null");
}
else
System.out.println("timeThread != null");
}
public void run() {
while (timeThread != null && time_remaining>0 && isOn && isOk) {
time_remaining=time_remaining-1;//时间流逝...
System.out.println(time_remaining);
try {
timeThread.sleep(TIMEINTERVAL);//计时
} catch (InterruptedException e){}
}
if(isOn && isOk){
//isOn==true:说明是超时-计时已满而不是因为按取消导致烹饪终止
//isOk==true:说明是超时-计时已满而不是因为外界条件破坏而导致(如此例中开了门)
timeExpired();//超时
timeThread=null;
}
else{//是按取消按钮而导致烹饪终止
off();//取消按钮,关闭timer
timeThread=null;
}
}
public void add60secToTime(){
if(isOk){
time_remaining += 60;
}
System.out.println("time_remaining:"+time_remaining);
}
public void setTimeToZero(){
time_remaining=0;
}
public void timeExpired(){//通知所有预定计时超时事件的观察者
for(int i=0;i<Observers_TimerExpired.size();i++){
((TimerObserver)Observers_TimerExpired.elementAt(i)).recieveTimerNotification();
}
}
public void on(){//通知所有预定计时开始事件的观察者
isOn=true;
for(int i=0;i<Observers_TimerOn.size();i++){
((TimerObserver)Observers_TimerOn.elementAt(i)).recieveTimerNotification();
}
}
public void off(){//通知所有预定计时结束事件的观察者
isOn=false;
for(int i=0;i<Observers_TimerOff.size();i++){
((TimerObserver)Observers_TimerOff.elementAt(i)).recieveTimerNotification();
}
}
public void subscribeTimerOn(Object obt){
Observers_TimerOn.add(obt);
}
public void unsubscribeTimerOn(Object obt){
Observers_TimerOn.remove(obt);
}
public void subscribeTimerOff(Object obt){
Observers_TimerOff.add(obt);
}
public void unsubscribeTimerOff(Object obt){
Observers_TimerOff.remove(obt);
}
public void subscribeTimerExpired(Object obt){
Observers_TimerExpired.add(obt);
}
public void unsubscribeTimerExpired(Object obt){
Observers_TimerExpired.remove(obt);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -