java 的 callback

Posted 今夜星光灿烂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 的 callback相关的知识,希望对你有一定的参考价值。

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

 

以上是关于java 的 callback的主要内容,如果未能解决你的问题,请参考以下文章

java代码在片段活动中不起作用

java回调机制(callBack)

创建片段而不从 java 代码实例化它

# Java 常用代码片段

# Java 常用代码片段

java 代码片段【JAVA】