码迷,mamicode.com
首页 > 编程语言 > 详细

java 的 callback

时间:2020-03-01 14:21:25      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:private   new   gis   sys   reg   ace   think   特性   ring   

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

标签:private   new   gis   sys   reg   ace   think   特性   ring   

原文地址:https://www.cnblogs.com/ashen/p/12389341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!