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 ,只不过管理者由程序员自己来管理了。

最新文章

  1. .Net 序列化(去除默认命名空间,添加编码)
  2. C#与C/C++的交互zz
  3. Hadoop2.6.0安装 — 集群
  4. Sql Server 2008服务启动失败,错误17058
  5. 修改hive分区表,在分区列前增加一个字段
  6. Flex(flash)检测摄像头的3种状态(是否被占用,没安装摄像头,正常)
  7. MongoDB系列一(索引及C#如何操作MongoDB)
  8. hdu2243考研路茫茫——单词情结(ac+二分矩阵)
  9. ural 1109,NYOJ 239,匈牙利算法邻接表
  10. ISBN号码
  11. Android Gradle 学习笔记(一):Gradle 入门
  12. Codeforces 446A. DZY Loves Sequences (线性DP)
  13. 福州大学软件工程1916 | W班 作业成绩排名汇总
  14. Python的类的下划线命名的区别
  15. MySQL Schema与数据类型的优化
  16. [原]Django(1)----Django-setting中的STATIC_URL 和STATIC_ROOT 和STATICFILES_DIRS 的区别
  17. gulp结合webpack开启多页面模式,配置如下
  18. 二分图学习——基础dfs判断二分图
  19. 【bzoj4516】 Sdoi2016—生成魔咒
  20. java web 3.1-web.xml文件配置

热门文章

  1. WebApi 接口传参接参
  2. Q200510-01: 求部门工资最高的员工
  3. Html中让输入框input和紧接在后的按钮button在垂直方向上对齐
  4. [oracle/sql]求员工表中每个部门里薪水最高的员工,那种sql最优?
  5. 使用wangEditor富文本编辑器
  6. Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库
  7. JVM七大垃圾回收器上篇Serial、ParNeW、Parallel Scavenge、 Serial Old、 Parallel Old、 CMS、 G1
  8. Node.js 从零开发 web server博客项目[登录]
  9. 深入理解python语言
  10. (专题一)04 matlab矩阵表示