JAVA回调机制和观察者模式实例分享
回调函数在JAVA中使用频繁,比如Swing可视化编码中的监听事件等等,一般回调函数都是,通过某一个方法的执行,自动调用回调对象的回调方法,比如,有一个接口,里面有一个方法onNotify(),这个方法是一个回调方法,表明当触发事件发生时候,该调用的方法,举个例子:
一个回调接口
/**
* @author minliangzhi
* @date 2016年9月8日
*/
public interface ICallBack {
void onNotify();
}
一个具体的实体对象,会出发回调函数的执行:
/**
* @author minliangzhi
* @date 2016年9月8日
*/
public class Task {
private ICallBack callBack;
public Task(ICallBack callBack) {
this.callBack = callBack;
}
public void doSomething() {
callBack.onNotify();
}
}
具体的使用方法为:
public static void main(String[] args) {
new Task(new ICallBack() {
@Override
public void onNotify() {
System.out.println("我是回调方法");
}
}).doSomething();
}
通过调用实体对象的方法,就会触发回调函数对象的回调方法,我们这里只是简单的使用了一个匿名类的方法提供了回调对象。
由此,我们可以分析下观察者模式的具体含义和一般实现:
观察者模式可以分成两部分,一部分是发布者,一部分是观察者,发布者的某些方法,会通知所有的观察者,让他们知晓发布者的发布信息。
观察者:
/**
* @author minliangzhi
* @date 2016年9月8日
*/
public interface Observer {
void onNotify(String content);
}
public class Mike implements Observer {
@Override
public void onNotify(String content) {
System.out.println("Mike get : " + content);
}
}
public class Bob implements Observer {
@Override
public void onNotify(String content) {
System.out.println("Bob get : " + content);
}
}
上述定义了两个观察者,下面定义一个发布消息者:
/**
* @author minliangzhi
* @date 2016年9月8日
*/
public interface Publisher {
/**
* 注册一个观察者
* @param observer
*/
void registObserver(Observer observer);
/**
* 移除一个观察者
* @param observer
*/
void removeObserver(Observer observer);
/**
* 通知所有的观察者
*/
void notifyAllObserver();
}
一个具体的实现类,工作发布者Hunter:
/**
* @author minliangzhi
* @date 2016年9月8日
*/
public class Hunter implements Publisher {
private List<Observer> observer;
private String jobContent;
public void setJob(String content) {
this.jobContent = content;
}
public Hunter() {
this.observer = new ArrayList<Observer>();
}
@Override
public void registObserver(Observer observer) {
this.observer.add(observer);
}
@Override
public void removeObserver(Observer observer) {
this.observer.remove(observer);
}
@Override
public void notifyAllObserver() {
for(Observer ob : observer) {
ob.onNotify(jobContent);
}
}
}
使用方法:
public static void main(String[] args) {
/** 构造发布者和观察者,并注册 */
Hunter hunter = new Hunter();
Observer bob = new Bob();
Observer mike = new Mike();
hunter.registObserver(bob);
hunter.registObserver(mike);
/** 发布消息,通知所有观察者 */
hunter.setJob("JAVA");
hunter.notifyAllObserver();
}
JAVA回调机制和观察者模式实例分享的更多相关文章
- java回调机制及其实现(转)
1. 什么是回调函数 回调函数,顾名思义,用于回调的函数.回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机.回调 ...
- Java回调机制总结
调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种: 1.同步调用 同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B的方法b( ...
- 转:一个经典例子让你彻彻底底理解java回调机制
一个经典例子让你彻彻底底理解java回调机制 转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273 ...
- Java基础9:解读Java回调机制
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- JAVA回调机制(CallBack)详解
序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...
- 深入浅出: Java回调机制(异步)
一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调 ...
- JAVA 回调机制(callback)
序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...
- [转]JAVA回调机制(CallBack)详解
看见一篇博客比较通俗的解释了回调机制,转载一下,感谢原文作者Bro__超,原文地址:http://www.cnblogs.com/heshuchao/p/5376298.html 序言 最近学习jav ...
- JAVA回调机制解析
一.回调机制概述 回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走.俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破! 回调机制是什么?其实回 ...
随机推荐
- Gitlab完美安装【CentOS6.5安装gitlab-6.9.2】
摘要: 拆腾了几天,终于在今天找到了快速安装Gitlab的方法.CentOS6.5安装gitlab-6.9.2 参考网址:https://gitlab.com/gitlab-org/omnibus-g ...
- ArcGIS 10.1 BUG记录
声明:笔者使用ARCGIS 10.1 XXX版,YYY版可能没有此处描写的问题 1. 关于注册数据库 发布启用FA的服务,需要为数据库进行ArcGIS Server注册,若通过ArcMap执行注册,会 ...
- CDR VBA将字母改为大写
ActiveShape.Text.FontProperties.Uppercase = cdrSmallCapsFontCase
- cocoapods真机调试出现问题解决
swift中使用cocoapods时,Podfile中必须写上 use_frameworks! 使用cocoapods导入框架在真机调试出现问题的解决方案: 1.build phases 2.+ ne ...
- DOS批处理命令
1.echo的用法(echo /? --查看帮助) echo off/on 打开关闭回显功能(@echo off 关闭回显并且不需要回显 echo 命令) echo, 显示空行(也可以是; . ...
- 关于java中多态的理解
java三大特性:封装,继承,多态. 多态是java的非常重要的一个特性: 那么问题来了:什么是多态呢? 定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行 ...
- inotify监控文件变化
1.安装inotify-tools yum install make gcc gcc-c++ #安装编译工具 inotify-tools下载地址:http://github.com/downloa ...
- 113使用FOR做九九税法表-不知道为什么自己的编译器实现不了制表符
package com.chongrui.test;/* *使用FOR做九九税法表 * * * */public class test { public static void main(S ...
- 与你相遇好幸运,使用redis设置定时任务
参考链接: Nodejs中使用Redis来完成定时任务 自己在 window 7下编码实现: 1 > 首先查看redis版本: redis-server -v , 版本要求大于等于2.8 2&g ...
- 10201启动时候报ORA-27125
[ora10g@oracle ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Thu Feb 26 18:46 ...