模拟“事件监听器”(二)

原创 2013年12月04日 10:30:07

1、定义一个事件类

package hb.event;


public class Event {
	
	private EventType type;
    private int nodeID;
    private boolean processed;

    public Event(EventType type, int oldNodeID) {
        this.type = type;
        this.nodeID = oldNodeID;
    }

    public EventType getType() {
        return type;
    }

    public int getNodeID() {
		return nodeID;
	}

	public void setNodeID(int nodeID) {
		this.nodeID = nodeID;
	}

	public void setType(EventType type) {
		this.type = type;
	}

	public boolean isProcessed() {
        return processed;
    }

    public void setProcessed(boolean processed) {
        this.processed = processed;
    }

    @Override
	public String toString() {
        return super.toString() + " type: " + type;
    }
    
    public static enum EventType {

        /**
         * This JVM joined a cluster.
         */
        receive,

        /**
         * This JVM is no longer part of the cluster.
         */
        send,

    }
}

 

2、定义一个监听接口

package hb.event;

public interface EventListener {
	
	public void action(Event event);
	
}

 

3、添加两个监听接口实现类

package hb.event;

public class ReceiveEventListener implements EventListener {

	private Event event;
	
	@Override
	public void action(Event event) {
		// TODO Auto-generated method stub
		System.out.println("ReceiveEventListener");
	}
	
	public ReceiveEventListener(Event event){
		this.event = event;
	}
	
	public ReceiveEventListener(){
	}

}

 

package hb.event;

public class SendEventListener implements EventListener {

	private Event event;

	@Override
	public void action(Event event) {
		// TODO Auto-generated method stub
		System.out.println("SendEventListener");
	}

	public SendEventListener(Event event) {
		this.event = event;
	}
	
	public SendEventListener() {
	}
}

 

4、定义一个事件源(即监听事件的目标)

package hb.event;

import java.util.HashMap;
import java.util.Map;

public class Resource {
	
	
	Map<Event.EventType,EventListener> map = new HashMap<Event.EventType,EventListener>();
	
	public void addListener(Event.EventType eventType,EventListener eventListener){
		map.put(eventType, eventListener);
	}
	
	public void removeListener(Event.EventType eventType){
		map.remove(eventType);
	}
	
	public void sendAction(Event event){
		EventListener eventListener = (EventListener)map.get(Event.EventType.send);
		if(eventListener!=null){
			eventListener.action(event);
		}
	}
	
	public void receiveAction(Event event){
		EventListener eventListener = (EventListener)map.get(Event.EventType.receive);
		if(eventListener!=null){
			eventListener.action(event);
		}
	}
	
	
}

 

5、测试类

package hb.event;

public class EventTest {

	public static void main(String[] args) {
		
		Resource resource = new Resource();
		
		ReceiveEventListener receiveListener = new ReceiveEventListener();
		SendEventListener sendListener = new SendEventListener();
		
		
		resource.addListener(Event.EventType.receive, sendListener);
		resource.addListener(Event.EventType.send, sendListener);
		
		
		Event sendevent = new Event(Event.EventType.send,1);
		Event receiveevent = new Event(Event.EventType.receive,2);
		
		resource.sendAction(sendevent);
		resource.receiveAction(receiveevent);
		
	}

}

 

【GDOI2017模拟二试4.12】石子游戏

题目大意给出n个数a[i],将x改为y的代价为|x-y|,求将a变成xor和为零的最小代价。 1≤n≤15,0≤a[i]≤1091\le n\le 15,0\le a[i]\le 10^9题解考虑动...
  • samjia2000
  • samjia2000
  • 2017年04月12日 20:38
  • 196

【JZOJ5054】【GDOI2017模拟二试4.12】统计

Description给定n,k,求满足一下条件的整数数组a[]的数量: 1.a[]中共有k个元素; 2. a[i] ∈ [1,n]; 3. ∀i∈[1,k),a[i]≤...
  • crybymyself
  • crybymyself
  • 2017年04月16日 10:46
  • 150

模拟“事件监听器”(一)

在网上搜索了很多关于事件驱动的,大部分都是介绍如何利用awt包里面的控件,然而自己却是想要了解这个是怎么设计的,因此模拟了一个简单的demo,提供自己学习   在讲解事件驱动模型之前,我们现在看看...
  • hbiao68
  • hbiao68
  • 2013年12月04日 10:23
  • 269

【GDOI2017 Day 1 T2】取石子游戏

Description如果你不想和题面软磨硬泡的话,请。。。。。 (以下省略5000字)……给你一个1为根,N个点的树,每个点有权值。 定义mex(S)表示不在S集合中最小的非负整数对于每个点,求...
  • hzj1054689699
  • hzj1054689699
  • 2017年05月17日 12:53
  • 192

成都青羊考场科目二考试分享

成都青羊考场科目二分享
  • a358763471
  • a358763471
  • 2014年08月22日 09:33
  • 4243

JZOJ4849. 【GDOI2017模拟11.3】记忆的轮廓 期望+答案上界剪枝

转自a_crazy_czy题目大意原题意挺复杂的,我就尽我能力写简化一点吧…… 给定一个有mm个点的树形结构(11为根),其中保证11到nn按照编号顺序形成一条链。 然后你要在这棵树上推Gal从1...
  • YxuanwKeith
  • YxuanwKeith
  • 2016年11月03日 22:35
  • 546

GDOI2017模拟 Round 4 4.24-4.26

4.24 策略大失误。。。 T2T3的暴力爆炸了,,T4的正解打挂了。。唉。。而且最不爽的就是暴力竟然都有50分。。感觉心情复杂。。 30+0+0+10=40 4.25 %%%Worldwi...
  • qq_35866453
  • qq_35866453
  • 2017年04月25日 16:00
  • 127

Java学习笔记(二)事件监听器

Java实现对组件事件(如单击、输入等)的监听和JavaScript类似,都是先添加Listener,再写触发函数,不同的是,Java实现监听前必须使用implements将各个接口添加到类内。   ...
  • xyt8023y
  • xyt8023y
  • 2014年12月31日 20:49
  • 440

2013深圳驾考新规科目二实战技巧及注意事项 (广仁驾校)

2013年新规驾考科目二扣分标准及技巧 一、科目二考试顺序:            上坡起步定点停车、侧方位停车、曲线行驶、直角转弯、倒车入库。 二、解析:小心,此些地方容易扣分   综合评...
  • fen0707
  • fen0707
  • 2013年06月26日 13:59
  • 1548

Servlet事件监听器(二)

张老师对Servlet事件监听器的三个接口做了详细的说明,并举例用 ServletContextListener事件监听器对象的contextInitialized()方法和contextDesto...
  • a382064640
  • a382064640
  • 2014年05月19日 12:56
  • 625
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模拟“事件监听器”(二)
举报原因:
原因补充:

(最多只允许输入30个字)