package com.Demo;
import java.util.EventListener;
//Title:监听器接口
public interface DemoListener extends EventListener
{
public void demoEvent(DemoEvent dm);
}
package com.Demo;
import java.util.EventObject;
//事件处理类,继承了事件基类
public class DemoEvent extends EventObject
{
private static final long serialVersionUID=-8352051534142982085L;
private Object obj;
private String sName;
public DemoEvent(Object source,String sName)
{
super(source);
obj=source;
this.sName=sName;
}
public Object getSource()
{
return obj;
}
public void say()
{
System.out.println("这个是say方法....");
}
public String getName()
{
return sName;
}
}
package com.Demo;
import java.util.Enumeration;
import java.util.Vector;
/**
*Title:使用事件的类Description:该类实现了监听器的添加和监听器方法的执行,
并且实现了由于属性的改变而执行事件
*Description:在添加、删除、执行监听器的时候都要注意同步问题
*/
public class DemoSource
{
private Vector<DemoListener> repository =new Vector<DemoListener>();
private DemoListener dl;
private String sName="";
public DemoSource()
{}
//注册监听器,如果这里没有使用Vector而是使用ArrayList那么注意同步问题
public void addDemoListener (DemoListener dl)
{
repository.addElement(dl);//这步要注意同步问题
}
//如果这里没有使用Vector而是使用ArrayList那么注意同步问题
public void notifyDemoEvent(DemoEvent event)
{
Enumeration<DemoListener> en=repository.elements();//这步要注意同步
while(en.hasMoreElements())
{
dl=(DemoListener)en.nexElement();
dl.demoEvent(event);
}
}
//删除监听器
public void removeDemoListener(DemoListener dl)
{
respository.remove(dl);
}
//设置属性
public void setName(String str1)
{
boolean bool=false;
if(str1==null &&sName!=null)
bool=true;
else if(str1=null&& sName==null)
bool=true;
else if(!sName.equals(str1))
bool=true;
this.sName=str1;
//如果改变执行事件
if(bool)
notifDemoEvent(new DemoEvent(this.sName));
}
public String getName()
{
return sName;
}
}
/**
*Title:测试类Description:测试了由于改变属性而引起的事件发生
*/
public class TestDemo implements DemoLister
{
private DemoSource ds;
public TestDemo()
{
ds=new DemoSource();
ds.addDemoListener(this);
System.out.println("添加监听器完毕");
try {
Thread.sleep(3000);
//改变属性,触发事件
ds.setName("改变属性,触发事件");
}
catch(Exception e)
{
e.printStackTrace();
}
ds.addDemoListener(this);
System.out.println("添加监听器完毕2");
try {
Thread.sleep(3000);
//改变属性,触发事件
ds.setName("改变属性,触发事件2");
}
catch(Exception e)
{
e.printStackTrace();
}
ds.removeDemoListener(this);
System.out.println("添加监听器完毕3");
try {
Thread.sleep(3000);
//改变属性,触发事件
ds.setName("改变属性,触发事件3");
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])
{
new TestDemo();
}
public void demoEvent(DemoEvent dm)
{
System.out.println("事件处理方法");
System.out.println(dm.getName());
dm.say();
}
} |