俗话说,站在巨人肩上,可以使我们走的更远

使用已有的java组件,可以提高我们的开发效率,减少出错几率,apache commons中包含有很多这样的组将,commons-lang3就是其中的一个,当前存在commons-lang和commons-lang3两个组件,后者可看做是前者的升级,前者内容已经迁移到后者,所以我们在使用时,直接使用后者即可

commons-lang3中添加了事件处理机制。EventListenerSupport为event包下的一个事件监听模块。当我们在完成一件事件时,需要通知其他模块做一些处理,就可以使用该功能进行处理

比如:商家发货后,需要通知快递小哥取货,并且通知用户商家已接单。使用该功能实现起来也很简单.

maven依赖中加入commons-lang3

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId>
<artifactId>langdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>langdemo</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</project>

接口

package com.demo.langdemo.listeners;

public interface IListeners {
// 接收消息
void receive();
}

用户

package com.demo.langdemo.listeners.impl;

import com.demo.langdemo.listeners.IListeners;

/**
* 用户
*/
public class User implements IListeners { private String name; public User(String name) {
this.name = name;
} public String getName() {
return name;
} public void receive() {
System.out.println("\"" + this.getName() + "\"收到信息:已发货");
} }

快递员

package com.demo.langdemo.listeners.impl;

import com.demo.langdemo.listeners.IListeners;

/**
* 快递员
*/
public class Courier implements IListeners { private String name; public Courier(String name) {
this.name = name;
} public String getName() {
return name;
} public void receive() {
System.out.println("\"" + this.getName() + "\"收到信息: 有快递需要发送");
} }

测试类

package com.demo.langdemo;

import org.apache.commons.lang3.event.EventListenerSupport;
import com.demo.langdemo.listeners.IListeners;
import com.demo.langdemo.listeners.impl.Courier;
import com.demo.langdemo.listeners.impl.User; public class App {
public static void main(String[] args) {
EventListenerSupport<IListeners> listenersEvent = new EventListenerSupport<>(IListeners.class);
// 注册监听
listenersEvent.addListener(new Courier("快递员小马"));
listenersEvent.addListener(new User("用户小刘"));
listenersEvent.fire().receive();
}
}

运行结果如下

若要新加一个监听,比如通知第三方已发货,则新建一个类实现LListener接口

package com.demo.langdemo.listeners.impl;

import com.demo.langdemo.listeners.IListeners;

public class ThirdParty implements IListeners {

    private String name;

    public ThirdParty(String name) {
this.name = name;
} public String getName() {
return name;
} @Override
public void receive() {
System.out.println("\"" + this.getName() + "\"收到信息:已发货");
} }

注册接口(接口注册要在fire方法之前)

listenersEvent.addListener(new ThirdParty("第三方公司"));

运行测试

commons-lang3 事件机制 <EventListenerSupport>的更多相关文章

  1. 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)

    前言 这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅, ...

  2. tkinter事件机制

    一.tkinter.Event tkinter的事件机制跟js是一样的,也是只有一个Event类,这个类包罗万象,集成了键盘事件,鼠标事件,包含各种参数. 不像java swing那种强类型事件,sw ...

  3. [解惑]JavaScript事件机制

    群里童鞋问到关于事件传播的一个问题:“事件捕获的时候,阻止冒泡,事件到达目标之后,还会冒泡吗?”. 初学 JS 的童鞋经常会有诸多疑问,我在很多 QQ 群也混了好几年了,耳濡目染也也收获了不少,以后会 ...

  4. Atitit  数据库的事件机制--触发器与定时任务attilax总结

    Atitit  数据库的事件机制--触发器与定时任务attilax总结 1.1. 事件机制的图谱1 2. 触发器的类型2 3. 实现原理 After触发器 Vs Instead Of触发器2 3.1. ...

  5. 深入浅出iOS事件机制

    原文地址: http://zhoon.github.io/ios/2015/04/12/ios-event.html 本文章将讲解有关iOS事件的传递机制,如有错误或者不同的见解,欢迎留言指出. iO ...

  6. Java 事件机制

    java事件机制包括三个部分:事件.事件监听器.事件源. 1.事件.一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息,用于listener的相应的方法之中,作 ...

  7. Angular $scope和$rootScope事件机制之$emit、$broadcast和$on

    Angular按照发布/订阅模式设计了其事件系统,使用时需要“发布”事件,并在适当的位置“订阅”或“退订”事件,就像邮箱里面大量的订阅邮件一样,当我们不需要时就可以将其退订了.具体到开发中,对应着$s ...

  8. 【java】org.apache.commons.lang3功能示例

    org.apache.commons.lang3功能示例 package com.simple.test; import java.util.Date; import java.util.Iterat ...

  9. JavaScript 详说事件机制之冒泡、捕获、传播、委托

    DOM事件流(event  flow )存在三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 事件捕获(event  capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会 ...

随机推荐

  1. Java地位被撼动?Java与JavaScript的趣事连载

    第一回 JavaScript的进攻 公元2014年,Java 第八代国王终于登上了王位. 第一次早朝,国王坐在高高的宝座上,看着毕恭毕敬的大臣,第一次体会到了皇权的威力. 德高望重的IO大臣颤悠悠地走 ...

  2. C#实现将Chart图表生成JPG图片的方法

    SaveFileDialog savefile= new SaveFileDialog();            savefile.Filter = "JPEG文件|*.jpg" ...

  3. pandas 对数据帧DataFrame中数据的增删、补全及转换操作

    1.创建数据帧 import pandas as pd df = pd.DataFrame([[1, 'A', '3%' ], [2, 'B'], [3, 'C', '5%']], index=['r ...

  4. java~api返回值的标准化

    api返回值的标准化 例如 {"status":200,"message":"操作成功","data":"{\ ...

  5. SLAM+语音机器人DIY系列:(四)差分底盘设计——6.底盘里程计标

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  6. 杭电ACM2018--母牛的故事

    母牛的故事 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  7. ssh登录错误ECDSA host key for ip has changed解决方案

    当我们使用ssh root@ip登录Linux服务器时,服务器报错: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WAR ...

  8. c# Lambda操作类封装

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  9. java--基本数据类型的转换(强制转换)

    强制类型的转换 规则: 1.执行算术运算时,低类型(短字节)可以转换为高类型(长字节):例如: int型转换成double型,char型转换成int型等等. 就是用强制类型来实现. 3.强制类型转换语 ...

  10. Eclipse4JavaEE配置Tomcat运行环境

    如果我们想搭一个网站,我们可以使用Eclipse for JavaEE IDE进行开发. 初次使用需要配置网站的运行环境,可以去Apache官网下载Tomcat 8.5或Tomcat 9的版本 然后打 ...