最近因为经常容易搞混回调和代理,就写个小例子就当给自己做个笔记吧。
- 先写回调,在写之前我们需要新建一个回调接口(interface)类addCallback,然后B类中实现回调方法,最后通过对象进行调用即可。不多说,直接来代码:
package callback;
/**
* Created by jeromexiong on 2017/7/7.
* 这是回调接口
*/
@FunctionalInterface
public 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);
}
});
}
}
- 回调就是这么简单,接下来就是代理(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);
}
}
好了,是不是觉得很简单,最后再贴上运行结果就完美了 ^_^
代理方法实现add:3+5=8
回调方法实现add:8
这也是小弟对回调机制的一点拙见,不懂的请留言,如果有错误希望指出!多谢!
顺便附上小弟的项目压缩包吧。点击下载