###事件处理 与c#中的委托相似,Java中事件的原型就是observer设计模式。
代码示例1:
interface WaterOkListener{
void actionWaterOk();
}
class Water{
java.util.List<WaterOkListener>waterOk =new java.util.ArrayList<WaterOkListener>();
//绑定事件
public void addWaterOkListener(WaterOkListener sender){
waterOk.add(sender);
}
//取消绑定
public void removeWaterOkListener(WaterOkListener e){
waterOk.remove(e);
}
//触发事件
public void waterOk(){
System.out.println("水开了!");
for(int i=0;i<waterOk.size();i++){
waterOk.get(i).actionWaterOk();
}
}
}
class Zhangsan implements WaterOkListener{
public void actionWaterOk(){
System.out.println("张三去提水去了!!");
}
}
class Lisi implements WaterOkListener {
public void actionWaterOk(){
System.out.println("李四去提水去了!");
}
}
class waterTest{
public static void main(String[]args){
Lisi f=new Lisi();
Zhangsan z=new Zhangsan();
Water w=new Water();
w.addWaterOkListener(f);
w.addWaterOkListener(z);
w.waterOk();
}
}
代码示例2:
package java事件;
import java.util.*;
//最简单的事件
interface WakenUpListener
{
void actionWakenUp();
}
class Child
{
private boolean wakeUp = false;
private List<WakenUpListener> wakenUp = new ArrayList<WakenUpListener>();
public void addActionListener(WakenUpListener w)
{
wakenUp.Add(w);
}
public void removeActionListener(WakenUpListener e)
{
wakenUp.Remove(e);
}
public void wake()
{
System.out.println("小孩醒了!");
for (int i = 0; i < wakenUp.size(); i++)
{
wakenUp.get(i).actionWakenUp();
}
}
}
class Father implements WakenUpListener
{
public void actionWakenUp()
{
System.out.println("喂小孩东西吃!");
}
}
class GrandFather implements WakenUpListener
{
public void actionWakenUp()
{
System.out.println("抱小孩出去玩!");
}
}
class Dog implements WakenUpListener
{
public void actionWakenUp()
{
System.out.println("汪汪汪...");
}
}
class test
{
public static void main(String[] args)throws Exception
{
Dog d = new Dog();
Father f = new Father();
GrandFather g = new GrandFather();
Child c = new Child();
c.addActionListener(d);
c.addActionListener(f);
c.addActionListener(g);
Thread.sleep(200);
c.wake();
c.removeActionListener(d);
c.wake();
}
}
© 著作权归作者所有