使用一个小例子解释Java回调/代理机制

来源:互联网 发布:老园丁淘宝店哪家正版 编辑:程序博客网 时间:2024/05/20 11:46

最近因为经常容易搞混回调和代理,就写个小例子就当给自己做个笔记吧。


  1. 先写回调,在写之前我们需要新建一个回调接口(interface)类addCallback,然后B类中实现回调方法,最后通过对象进行调用即可。不多说,直接来代码:
package callback;/** * Created by jeromexiong on 2017/7/7. * 这是回调接口 */@FunctionalInterfacepublic interface AddCallback {    void result(int result);}
package callback;/** * Created by jeromexiong on 2017/7/7. * 调用回调方法,在Main中调用 */public class B {    public B(){        //new C().addDelegate();//实现代理方法    }    //调用回调方法    public void addFunc(int a, int b, AddCallback result){        result.result(a+b);    }}

1.1 在Main方法中先实例化B类对象,在通过addFunc方法调用回调方法,打印回调结果。

package callback;/** * Created by jeromexiong on 2017/7/7. * 调用回调方法 */public class Main{    public static void main(String[] args){        //会调用代理方法        B b = new B();        //实现回调方法。        b.addFunc(3, 5, new AddCallback() {            @Override            public void result(int result) {                System.out.print("\n回调方法实现add:"+result);            }        });    }}
  1. 回调就是这么简单,接下来就是代理(delegate)了。同样滴,在写代理之前我们也需要新建一个代理接口(interface)类AddDelegate,然后在A类中设置代理并且调用代理方法。
package delegate;/** * Created by jeromexiong on 2017/7/7. * 这是代理接口 */public interface AddDelegate {    void addResult(int a, int b, int result);}
package delegate;/** * Created by jeromexiong on 2017/7/7. * 调用代理方法,在C中实现 */public class A {    private int a = 3;    private int b = 5;    public AddDelegate delegate;    public void setDelegate(AddDelegate delegate) {        this.delegate = delegate;    }    //在实现代理方法之前需要先设置代理delegate    public void addFunc(){        delegate.addResult(a, b, a+b);    }}

2.1 在这里说一点,因为设置要給对象设置代理delegate,不能放在静态Main方法中实现,所以这里就多绕了一步,在C类中实现代理方法,然后由B类的对象调用addDelegate方法实现。

package callback;import delegate.A;import delegate.AddDelegate;/** * Created by jeromexiong on 2017/7/7. * 实现代理方法,在A中调用 */public class C implements AddDelegate {    public void addDelegate(){        A a = new A();        a.setDelegate(this);        a.addFunc();    }    @Override    public void addResult(int a, int b, int result) {        System.out.print("\n代理方法实现add:"+a+"+"+b+"="+result);    }}

好了,是不是觉得很简单,最后再贴上运行结果就完美了 ^_^

代理方法实现add3+5=8回调方法实现add8

这也是小弟对回调机制的一点拙见,不懂的请留言,如果有错误希望指出!多谢!

顺便附上小弟的项目压缩包吧。点击下载

原创粉丝点击