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

使用已有的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. 原生的 django 分页

    原始的 django 分页 # 基本 写法 class Paginator(object): def __init__(self, object_list, per_page, orphans=0, ...

  2. ASP.NET Aries 高级开发教程:Excel导入之代码编写(番外篇)

    前言: 以许框架提供的导入配置功能,已经能解决95%以上的导入情况,但有些情况总归还是得代码来解决. 本篇介绍与导入相关的代码. 1.前端追加导入时Post的参数: var grid = new AR ...

  3. Java核心基础学习(一)--- 2019年1月

    1.对比Exception和Error,运行时异常与一般异常 Exception 和 Error 都继承了 Throwable 类,在 Java 中只有 Throwable 类才能 thorw(抛出) ...

  4. Pytorch中torch.autograd ---backward函数的使用方法详细解析,具体例子分析

    backward函数 官方定义: torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph ...

  5. Vue.js-03:第三章 - 事件修饰符的使用

    一.前言 熟悉了 Vue 的指令系统后,在实际开发中,不可避免的会使用到对于事件的操作,如何处理 DOM 事件流,成为我们必须要掌握的技能.不同于传统的前端开发,在 Vue 中给我们提供了事件修饰符这 ...

  6. nodejs 使用 ethers创建以太坊钱包

    创建钱包创建钱包流程: 生成随机助记词 => 通过助记词创建钱包=>钱包信息和加密明文(私钥和密码加密) 导入钱包通过插件提供方法,根据助记词|keyStore|私钥,找到钱包信息(地址和 ...

  7. 【设计模式+原型理解】第一章:使用Javascript来巧妙实现经典的设计模式

    刚开始学习设计模式之前,我是没想说要学习设计模式的,我只是因为想学习JS中的原型prototype知识,一开始我想JS中为什么要存在原型这个东西?于是慢慢通过原型而接触到设计模式,后来发现我这个过程是 ...

  8. Python 里的「单分派泛函数」到底是什么?

    泛型,如果你学过Java ,应该对它不陌生吧.但你可能不知道在 Python 中(3.4+ ),也可以实现简单的泛型函数. 在Python中只能实现基于单个(第一个)参数的数据类型来选择具体的实现方式 ...

  9. C#写一个简单爬虫

    最近研究C#的爬虫写法,搞了半天,才在网上很多的写法中整理出了一个简单的demo(本人菜鸟,大神勿喷).一是为了自己记录一下以免日后用到,二是为了供需要朋友参考. 废话不多说,上代码 using Ht ...

  10. weUI之分页查询实现

    本文旨在介绍移动端h5分页查询实现 1.前端html 前端基于weui 样式库实现   参考http://jqweui.com/ <div class="weui-search-bar ...