`
fys124974704
  • 浏览: 138090 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

事件驱动的比较

    博客分类:
阅读更多

      在java里面事件驱动是一种比较常见的设计模式,主要以awt控件为主!对于事件驱动我了解比较深刻的时候应该就是现在了,昨天刚刚听了一个高手将事件驱动,明白了一些道理,高手举的例子是一个小孩在睡觉,醒了之后,监护人去照顾他的场景模拟!

 

事件驱动标准的代码

package event.cn;

import java.util.ArrayList;
import java.util.List;

/* 看护人 */
interface Keeper {
	public abstract void action(EventSource es);
}

class Father implements Keeper {

	@Override
	public void action(EventSource es) {
		System.out.println("Father do........");
	}

}

class Mother implements Keeper {

	@Override
	public void action(EventSource es) {
		System.out.println("Monther do........");
	}

}

class GrandFather implements Keeper {

	@Override
	public void action(EventSource es) {
		System.out.println("GrandFather do........");
	}

}

class GrandMother implements Keeper {

	@Override
	public void action(EventSource es) {
		System.out.println("GrandMonther do........");
	}

}

/* 被看护人 */
class Child implements Runnable {
	List<Keeper> keepers = new ArrayList<Keeper>();
	EventSource es;

	public Child() {
	}
	
	public void addKeeper(Keeper k){
		this.keepers.add(k);
	}

	public void wakeup() {
		for(Keeper k : this.keepers){
			k.action(es);
		}
	}

	@Override
	public void run() {
		System.out.println("sleep ......");
		try {
			new Thread().sleep(5000);// 5秒后醒来
			this.wakeup();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

/* 传递信息 */
class EventSource {
	private String something_msg;
	private Child child;

	public EventSource(String something_msg, Child child) {
		super();
		this.something_msg = something_msg;
		this.child = child;
	}

	public String getSomething_msg() {
		return something_msg;
	}

	public void setSomething_msg(String something_msg) {
		this.something_msg = something_msg;
	}

	public Child getChild() {
		return child;
	}

	public void setChild(Child child) {
		this.child = child;
	}

}

public class EventTest {
	public static void main(String[] args) {
		Child child = new Child();
		child.addKeeper(new Father());
		child.addKeeper(new GrandFather());
		new Thread(child).start();
	}
}

 

 

在听高手讲解之前,我只能写出这样的代码

package event.com;

import java.util.ArrayList;
import java.util.List;

/* 看护人 */
abstract class Keeper{
	public abstract void action(EventSource es);
	
	public void receive(EventSource es ){
		List<Keeper> ks = es.getKs();
		for(Keeper k : ks){
			k.action(es);
		}
	}
}
/* 适配器 */
class KeeperAdapter extends Keeper{

	@Override
	public void action(EventSource es) {
		
	}
}
class Father extends Keeper{

	@Override
	public void action(EventSource es) {
		System.out.println("Father do........");		
	}
	
}

class Mother extends Keeper{

	@Override
	public void action(EventSource es) {
		System.out.println("Monther do........");		
	}
	
}

class GrandFather extends Keeper{

	@Override
	public void action(EventSource es) {
		System.out.println("GrandFather do........");		
	}
	
}

class GrandMother extends Keeper{

	@Override
	public void action(EventSource es) {
		System.out.println("GrandMonther do........");
	}
	
}

/* 被看护人 */
class Child implements Runnable{
	EventSource es;
	public Child(EventSource es){
		this.es = es;
	}
	
	public void wakeup(){
		Keeper k = new KeeperAdapter();
		k.receive(this.es);
	}

	@Override
	public void run() {
		System.out.println("sleep ......");
		try {
			new Thread().sleep(5000);//5秒后醒来
			this.wakeup();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

/* 传递信息 */
class EventSource{
	private String something_msg;
	private List<Keeper> ks;
	public EventSource(String something_msg, List<Keeper> ks) {
		super();
		this.something_msg = something_msg;
		this.ks = ks;
	}

	public String getSomething_msg() {
		return something_msg;
	}

	public void setSomething_msg(String something_msg) {
		this.something_msg = something_msg;
	}

	public List<Keeper> getKs() {
		return ks;
	}

	public void setKs(List<Keeper> ks) {
		this.ks = ks;
	}

}

public class EventTest {
	public static void main(String[] args) {
		List<Keeper> ks = new ArrayList<Keeper>();
		ks.add(new Father());
		ks.add(new GrandFather());
		EventSource es = new EventSource("test something",ks);
		Child child = new Child(es);
		new Thread(child).start();
	}
}

 

 

看上去两端代码的效果都是一样,但是前一个要比后一个要简练很多,而且设计也好很多!大家认为呢?

分享到:
评论

相关推荐

    基于STM32的事件驱动框架的应用

    《基于STM32的事件驱动框架的应用》这篇文章探讨了如何改善传统嵌入式单片机开发中的问题,提出了一种采用事件驱动型层次式状态机的 QuantumPlatform 量子框架与STM32单片机结合的解决方案。STM32,全称基于ARM ...

    事件驱动模型实例详解(Java篇)

    ### 事件驱动模型实例详解(Java篇) #### 1. 事件驱动模型概念解析 事件驱动模型是现代软件开发中一种关键的编程模式,尤其在图形用户界面(GUI)编程中占据核心地位。该模型围绕三个核心概念构建:事件源、侦听...

    单片机程序设计中运用事件驱动机制

    ### 单片机程序设计中运用事件驱动机制 #### 摘要 本文探讨了如何在单片机程序设计中引入事件驱动机制,通过实际案例分析了这种方法的优点,特别是能够提高系统对多中断的实时响应能力,并降低多中断系统调试的难度...

    Java 开发中事件驱动模型的实例详解

    在Java开发领域,事件驱动模型(Event-Driven Model)是一种广泛采用的设计模式,它通过响应外部事件来触发程序中的特定行为。本文将深入探讨Java中事件驱动模型的应用,特别是通过Swing框架的具体实例来解析这一...

    EPC(事件驱动过程链)简介

    EPC(事件驱动过程链)简介 EPC(事件驱动过程链)是一种强大的业务流程建模方法,旨在描述和分析复杂的商业业务流程。EPC 模型通过将业务过程中的静态资源(系统、组织、数据等)组织在一起,形成一个能够完成特定...

    数据结构-队列-事件驱动编程

    在IT领域,事件驱动编程是一种常见的编程模型,它主要用于构建响应用户输入、系统状态变化或者外部消息的应用程序。本文将详细解析如何利用数据结构中的队列来实现事件驱动编程,并结合给定的“银行排队”场景进行...

    基于事件驱动单片机程序设计

    在电子工程和嵌入式系统领域,事件驱动的单片机程序设计是一种常见的编程模型,它使得硬件设备和软件能够高效地协同工作。基于事件驱动的设计理念,单片机能够实时响应外部或内部发生的特定事件,如传感器输入、按键...

    事件驱动51程序通用框架代码

    标题中的“事件驱动51程序通用框架代码”指的是在51单片机上采用事件驱动编程模式的一个通用软件架构。51单片机是微控制器的一种,广泛应用于嵌入式系统设计,尤其适合初学者和低功耗应用。事件驱动编程是一种编程...

    引入事件驱动机制的程序框架

    事件驱动机制是软件设计中的一种常见模式,尤其在嵌入式系统和实时操作系统中广泛应用。51单片机是一款常见的微控制器,广泛用于各种小型电子设备。本程序框架将事件驱动的概念引入到51单片机的编程中,旨在提高程序...

    一个事件驱动的嵌入式控制器框架(基于STM32平台)

    Q-Controllers是一个事件驱动的应用代码框架,适用于低端单片机无法跑操作系统,但又要处理越来越复杂的代码构架的情况。 因为不依赖于操作系统,所以非常容易被移植到stm32之外的其他单片机上。即便不进行移植,...

    面向对象之事件驱动

    事件驱动编程(Event-Driven Programming,EDP)是一种编程模型,其中程序的执行由外部事件触发。在EDP中,程序不再按照预定的顺序执行,而是等待并响应各种事件,如用户输入、网络请求或定时器触发。这种模式常用于...

    spring事件驱动 + 策略模式应用

    技术: 1. spring事件驱动(ApplicationEventPublisher) 2. 策略模式处理事件 目的: 1. 通过event,代码逻辑异步处理 2. 通过策略模式,构建具体监听实现 3. 解耦 4. 容错(降低代码块错误风险)

    嵌入式系统的事件驱动型编程技术 第二版(中文)

    事件驱动型编程技术是嵌入式系统中常见的一种编程模型,尤其适用于实时性和响应速度要求高的应用。《嵌入式系统的事件驱动型编程技术 第二版》深入探讨了这一主题,为开发者提供了宝贵的理论知识和实践经验。 QP...

    事件驱动体系结构概述

    ### 事件驱动体系结构概述 #### 一、引言与背景 在《事件驱动体系结构概述》这篇由Brenda M. Michelson撰写的报告中,她深入探讨了事件驱动架构(Event-Driven Architecture,简称EDA)的概念及其与服务导向架构...

    socketEventMode 事件驱动socket端口通讯

    在IT行业中,网络通信是至关重要的部分,而事件驱动编程模型是实现高效网络服务的一种常见方式。本主题将深入探讨“socketEventMode”,这是一种利用事件驱动机制进行Socket服务器与客户端通信的方法。我们将围绕...

    一个事件驱动的嵌入式控制器框架(基于STM32平台).zip

    Q-Controllers是一个事件驱动的应用代码框架,适用于低端单片机无法跑操作系统,但又要处理越来越复杂的代码构架的情况。 因为不依赖于操作系统,所以非常容易被移植到stm32之外的其他单片机上。即便不进行移植,...

    WindML事件驱动机制分析

    ### WindML事件驱动机制分析 #### 一、嵌入式系统与WindML的背景 随着多媒体信息技术、互联网技术、通信技术以及消费类电子产品智能化趋势的不断加强,嵌入式系统因其特有的优势——占用内存少、高性能、具有完全...

    浅析基于事件驱动会计信息系统的会计运用

    在探讨基于事件驱动会计信息系统的会计运用时,首先要明确会计信息系统的基本概念。会计信息系统是一套由人、数据、程序和信息处理设备组成,旨在收集、存储、处理、报告和解释组织的财务数据和相关信息的系统。而...

    c++实现的对象事件驱动机制

    在编程领域,事件驱动机制是一种常见的软件设计模式,它基于观察者模式,使得程序能够对特定事件的发生作出反应。在本场景中,我们讨论的是如何使用C++来实现这种机制,而不依赖任何特定的平台库。C++本身并不内置...

    事件驱动的PHP测试框架.zip

    事件驱动编程是一种编程范式,它基于事件(如用户操作、硬件状态变化或网络通信)的发生,通过回调函数或者事件监听器来响应这些事件。在测试领域,事件驱动框架允许我们更加精细地控制测试流程,使测试更接近实际...

Global site tag (gtag.js) - Google Analytics