java 的 callback
2024-10-09 23:14:21
Java 本身没有回调这一说,但是面向对象可以模拟出来。
1. 回调接口对象 ICommand
package com.git.Cmder; public interface ICommand {
void execute(); // 1. Think in callback, void (*)pf()
}
2. 回调对象关联哪些,这个就是 c 中的 pf 赋值
package com.git.Cmder;
/*
将 command 和 receive 关联起来
*/
public class ConcreteCommand implements ICommand {
Receiver receiver; // // 1. Think in callback, func public void setReceiver(Receiver receiver) {
this.receiver = receiver; // // 1. Think in callback , pf = func
} public void execute() {
receiver.action(); // 1. Think in callback, call func
}
}
3. 关联对象 pf 的具体实现
package com.git.Cmder; public class Receiver {
public void action(){ // 1. Think in callback, func 的内容
/* 具体做的工作 */
System.out.println("Receiver Do.");
}
}
4. cb 的注册和调用封成一个对象 Invoker
package com.git.Cmder;
/*
调用者, 业务接口层
*/
public class Invoker {
private ICommand iCommand;
// 1. Think in callback, cb 的入口, register
/* 这里传子类过来,就调用子类的方法 */
public void setiCommand(ICommand iCommand) {
this.iCommand = iCommand;
} // 1. Think in callback, cb 的入口, call
public void action(){
iCommand.execute();
}
}
5. 测试
package com.git.Cmder; public class Client {
public static void main(String[] args) {
Receiver receiver = new Receiver(); // 真实的工作者 ConcreteCommand command = new ConcreteCommand(); // 2, 这里主要用的是 子类实现,调用子类的方法,接口定义的是父类,这样所有的子类都可以用了 command.setReceiver(receiver); // 2.1
Invoker invoker = new Invoker(); // 1
invoker.setiCommand(command); // 1.1
invoker.action();
}
}
这里主要用父子类的关系来实现,定义一个cb 对象,对象包含一个父类接口对象,和"父类接口对象的调用", 用语言本身的提供的多态特性(其实内存中的地址还是一个), 不同的子类有不同的实现, cb 对象可以看做 n 个方法的管理者,当你传入一个子对象,调用其方法,说了半天还是一个 key-val ,只不过管理者由程序员自己来管理了。
最新文章
- .Net 序列化(去除默认命名空间,添加编码)
- C#与C/C++的交互zz
- Hadoop2.6.0安装 — 集群
- Sql Server 2008服务启动失败,错误17058
- 修改hive分区表,在分区列前增加一个字段
- Flex(flash)检测摄像头的3种状态(是否被占用,没安装摄像头,正常)
- MongoDB系列一(索引及C#如何操作MongoDB)
- hdu2243考研路茫茫——单词情结(ac+二分矩阵)
- ural 1109,NYOJ 239,匈牙利算法邻接表
- ISBN号码
- Android Gradle 学习笔记(一):Gradle 入门
- Codeforces 446A. DZY Loves Sequences (线性DP)
- 福州大学软件工程1916 | W班 作业成绩排名汇总
- Python的类的下划线命名的区别
- MySQL Schema与数据类型的优化
- [原]Django(1)----Django-setting中的STATIC_URL 和STATIC_ROOT 和STATICFILES_DIRS 的区别
- gulp结合webpack开启多页面模式,配置如下
- 二分图学习——基础dfs判断二分图
- 【bzoj4516】 Sdoi2016—生成魔咒
- java web 3.1-web.xml文件配置
热门文章
- WebApi 接口传参接参
- Q200510-01: 求部门工资最高的员工
- Html中让输入框input和紧接在后的按钮button在垂直方向上对齐
- [oracle/sql]求员工表中每个部门里薪水最高的员工,那种sql最优?
- 使用wangEditor富文本编辑器
- Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库
- JVM七大垃圾回收器上篇Serial、ParNeW、Parallel Scavenge、 Serial Old、 Parallel Old、 CMS、 G1
- Node.js 从零开发 web server博客项目[登录]
- 深入理解python语言
- (专题一)04 matlab矩阵表示