`
pengcqu
  • 浏览: 775287 次
  • 性别: Icon_minigender_1
  • 来自: 未来
社区版块
存档分类
最新评论

Java事件处理机制与“恋爱关系”

阅读更多

  JAVA中事件处理机制是观察者模式或者说委托(授权)管理的一种。

 

1、在理解JAVA中事件处理机制前我们必须先理解三个重要的概念:
   事件源:产生事件的对象;
   事件处理器(监听器):负责处理事件的方法。
   事件对象:用于在事件源与事件处理器间传递信息的桥梁。
   它们之间的关系是:当事件源产生事件时,通过事件调用监听器相应的事件处理方法。

 

2、通过恋爱关系模拟事件处理机制:女孩子(事件源)产生高兴或不高兴的情绪(事件对象)时,男朋友(监听器)应该怎么做。
   1、确定三个类:Gril,Emotion,Boy
   2、Gril:要有一个名字属性,一个男朋友的属性(不可能满大街随便找个人给听你发牌气吧),还有一个add添加男朋友的方法。还有一个remove分手的方法。
      Boy:要有一个名字属性,要有happy,和unhappy的两个在女朋友找你时做相应处理的方法吧。他还要有监听器的功能,所以要实现EventListener接口吧。我们在查看到EventListener只是一个简单的标记接口,所以我们一般创建一个具体有点功能的监听接口EventListen具有happy,unhappy抽像方法,而Boy通过实现这个接口,来完成有个性的处理方法。
      Emotion:是一个事件对象,凭什么它就是一个事件对象呀,它要继承EventObject吧。查帮助看下。其中有一个方法getSource,通过这个方法就可以找到事件源了吧。通过查看EventObject构造方法,没有无参的构造方法,而创建对象默认是向上调用父类无参构造方法的,这样会出现错误,所以我们必须写一个含参的调用父类构造方法。
  3、Boy要根据Gril产出的不同事件对象使用不同的处理方法时,要接受事件对象(Emotion)的传入吧。即方法接收传入参数。
  4、Gril:有一个发牌气的方法fire,假设她1,3,5 happy,2,4,6 unhappy,7分手。
  5、前面已经实现了事件处理机制模型,为了更完善点使程序有多个男孩子追,并且加入异常处理。

import java.util.*;

class Gril {
	String name;
	Boy b;// 男朋友的属性

	public Gril(String name) {
		this.name = name;
	}

	public void addBoy(Boy b) throws MyHeartException // 相当注册监听器
	{
		// 添加男朋友
		if (this.b == null) {
			this.b = b;
			System.out.println("haha,I have boyfriend now");
		} else {
			throw new MyHeartException("I have boyfriend,wait me for a week");
		}
	}

	public void remove() {
		this.b = null;
		System.out.println("sorry,you never understand me!");
	}

	public void fire() {
		if (b == null)
			System.out.println("I have not boyfriend now!");
		else {
			Emotion e = new Emotion(this);
			for (int i = 1; i < 7; i++) {
				if (i % 2 == 0)
					b.unhappy(e);
				else {
					b.happy(e);
				}
			}
			remove();
		}
	}
}

 

 

class Boy implements EventListen {
	String name;

	public Boy(String name) {
		this.name = name;
	}

	public void happy(Emotion e) {
		Gril g = (Gril) e.getSource();
		System.out.println(name + " said :" + g.name + " you happy,I happy.");
	}

	public void unhappy(Emotion e) {
		Gril g = (Gril) e.getSource();
		System.out.println(name + " said :" + g.name
				+ " Do not worry!you have my too!");
	}
}

 

  

import java.util.EventObject;

class Emotion extends EventObject {
	public Emotion(Object src) { // EventObject的构造方法只有无参的构造方法
		super(src); // 所以只有显示的调用,src代表事件源
	}
}

 

 

import java.util.EventListener;

interface EventListen extends EventListener{
	 void happy(Emotion e);
	 void unhappy(Emotion e);
}


 

public class Test {
	public static void main(String[] args) {
		Gril g = new Gril("Anna");
		Boy b1 = new Boy("Tom");
		Boy b2 = new Boy("Jon");
		try {
			g.addBoy(b1);
			g.addBoy(b2);
		} catch (Exception e) {
			e.printStackTrace();
		}
		g.fire();
	}
}

class MyHeartException extends Exception {
	public MyHeartException(String str) {
		super(str);
	}
}

 

 

  相关链接:  

★  Java知识点汇总 

全球软件项目外包平台 兼职做外包 挣Money!

分享到:
评论

相关推荐

    2013-2-15学java就要像谈恋爱一样.pdf

    正如描述中所比喻的,尽管恋爱过程中可能会出现各种问题,但我们仍希望能继续前行,Java异常处理机制正是如此,它让程序在遇到错误时有机会恢复并继续执行。 Java的异常体系以`Throwable`为顶级父类,`Throwable`有...

    Java基础知识点 - 内容比较全面

    12. **Java事件处理机制与“恋爱关系”**:这个比喻可能指的是事件监听器模型,事件源(如按钮)和监听器之间存在“关系”,当事件发生时,监听器接收到通知并执行相应操作。 13. **Java代码优化编程**:优化包括...

    于JavaEE的校园恋爱交友平台

    JavaEE,全称Java Platform, Enterprise Edition,是Java语言在企业级应用开发中的标准框架。它包含了多种服务、组件模型以及接口,为开发高效、安全、可扩展的网络应用提供了强大的支持。在这个毕业设计项目中,...

    恋爱话术前后双端源码带10万数据.zip

    这个压缩包包含了一套完整的前端和后端源代码,以及10万条预设的恋爱对话数据,旨在帮助用户提高在恋爱关系中的沟通能力,解决情感交流中的困扰。以下是关于这个项目的一些关键知识点: 1. **前后端分离**:这是一...

    Android-Half-Plus-Seven:一款有助于计算人际关系可接受的社会年龄差异的应用程序

    这个规则被许多人用来评估恋爱或婚姻关系中双方年龄是否适宜。本文将深入探讨这款应用的开发背景、技术实现以及其对Java编程语言的运用。 首先,了解“半加七”规则的背景对于理解该应用的核心功能至关重要。这一...

    Datingapp

    Java应用程序通常会与关系型数据库如MySQL或NoSQL数据库如MongoDB配合使用。在" Datingapp"中,可能涉及用户资料、匹配算法数据、聊天记录等存储需求,因此数据库设计需考虑高效查询和数据安全性。 3. **RESTful ...

    SSH API(汉化版)

    **Hibernate** 是一个对象关系映射(ORM)框架,它将Java对象与数据库表进行映射,从而避免了传统的JDBC操作,减少了大量的SQL代码。Hibernate提供了丰富的API,可以进行对象的持久化操作,包括CRUD(创建、读取、...

    requireJs+Jfinal 例子

    - 插件机制:Jfinal支持灵活的插件扩展,如Shiro安全框架、ActiveRecord ORM框架等,可以快速集成到项目中。 3. 整合RequireJS与Jfinal: - 路由配置:在Jfinal中,通过`config/config_router.js`配置路由,与...

Global site tag (gtag.js) - Google Analytics