1.首先我们写个事件源的类 其中的Object就是我们数据处理的业务逻辑类,大家可以随意添加。
public class DoorEvent extends EventObject {
private static final long serialVersionUID=1L;
public DoorEvent(Object source) {
super(source);
}
}
2.监听者类,这里我们没有给出实现,大家可以自己尝试给出实现。在实现这个接口之后,这里的doSomething方法就是我们的回调方法。可以理解为我们写具体的实现,但是给别人调用。
public interface DoorEventListener extends EventListener {
public void doSomething(DoorEvent e);
}
3.下面这个类在setName操作时触发调用 ,其中最关键的就是下面这个类。利用了观察者模式
方法的本质就是行为,也就是当我调用某个方法时触发调用别的方法。只是这个方法的实现不是我们写的。
public class EventSourceObject {
private String name;
private Set listenerSet;
public EventSourceObject() {
this.listenerSet = new HashSet<>();
this.name = "defaultName";
}
public void addSourceListener(DoorEventListener doorEventListener) {
listenerSet.add(doorEventListener);
}
// 通知所有
public void notifies() {
DoorEventListener doorEventListener = null;
Iterator iterator= this.listenerSet.iterator();
while (iterator.hasNext()){
doorEventListener=iterator.next();
doorEventListener.doSomething(new DoorEvent(this));
}
}
public void setName(String name) {
//当setName时触发
this.notifies();
this.name = name;
}
}
调用测试类
public static void main(String[] args){
EventSourceObject object=new EventSourceObject();
object.addSourceListener(new DoorEventListener() {
@Override
public void doSomething(DoorEvent e) {
//把source可以传过来也可以不传,大家根据自己的情况操作,传过来这样我们就可以对源事件进行操作
e.getSource();
System.out.println("测试");
}
});
object.setName("小高");
}