定时器类、接口比喻

定时器类。现在什么都是自动化的,如空调、电视、洗衣机等等。都要用
到定时器这个
 
类。对了,还有定时炸弹也要用它。那我们可不可以只写一个定时器类,应用到所有的需要
定时器的设备
 
上呢?答案是肯定的,我们需要这个类。
  
好了,我们来分析一下定时器需要完成什么工作吧。定时器应该有启动、停止方法。定时器
启动之后,每
 
过一定时间就执行某个动作。
其中时间间隔为
long
型,
而要执行的动作可能是输出一个字符
串,也可能是
 
打印作业。具体要干什么由使用定时器的用户来完成。而定义定时器时,根本就不知道要干
什么。
  
public class Timmer { 
private long time;
private Action action; 
public Timmer() {}  
public Timmer(long time, Action action) { 
this.time = time; 
this.action = action; 
}  
public void start() { 
state = START; 
if(th == null) { 
th = new Thread() { 
public void run() { 
while(state == START) { 
try {  
Thread.sleep(time); 
action.action();  
} catch(Exception e) { 



}; 
}  
th.start(); 
}  
public void stop() { 
state = STOP; 
}  
public void setTime(long time) { 
this.time = time; 
}  
public void setAction(Action action) { 
this.action = action; 
}  
public long getTime() { 
return (this.time); 
}  
public Action getAction() { 
return (this.action); 

}  
Action是一个接口,它只有一个方法,就是要完成的任务。我们在定时器启动时调用这个接
口的方法。而这个Action接口的对象,代表一个动作,这个动作就是用户要完成的动作。
 
public interface Action { 
public void action();  
}  
public static void main(String[] args) { 
Timer t = new Timer(2000, new Action() { 
public void action() {  
System.out.println("Hello World!"); 

});  
t.start();  
javax.swing.JOptionPane.showMessageDialog(null, "点击确定按钮停止定时器"); 
t.stop();  
System.exit(0); 
}  
这是一个典型的回调方法例子。在AWT中,java使用了大量的监听器。这些监听器都是回调方法。在XML解析器
SAX中,也使用了回调方法来解析XML文档。
  
接口要比抽象类还要抽象。抽象类需要子类继承,而Java是单继承,所以抽象类被限制了。
而接口不同,一个类可以实现多个接口。好比人类与程序员类之间的关系。可以说程序员是人类的子类,
如果程序员是一个接口。用人类的子类来实现它就会更好。这个子类还可以去实现会计接口、音乐家接口
等等。
  
在struts2.0、spring、hibernate等框架中,都大量使用接口。
我们关心的是某个接口与另一个接口之间的关系。而不关心某个实现类与另一个接口实现类的关系。在客观世界中,我们交谈时都大
量使用接口,只是我们没有注意罢了。如:我公司需要一个程序员(一个实现了程序员接口的对象)。
上课时,讲师有一台计算机,用白板笔在白板上写字(计算机是接口,白板及白板笔也是接口)
。讲师希望学生能学会所有的知识(讲师及学生都是接口)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值