模板模式
参考https://blog.csdn.net/ezconn/article/details/108812616
观察者模式
参考https://blog.csdn.net/ezconn/article/details/108564814
一,方法回调(回调函数)
回调是一种双向调用关系。A 类事先注册某个函数H到 B 类,A 类在调用 B 类的M函数的时候,B 类反过来调用 A 类注册给它的H函数。这里的 H 函数就是“回调函数”。A 调用 B,B 反过来又调用 A,这种调用机制就叫作“回调”。
通过Java代码表示
public interface ICallback {
void onCallback();
}
public class BClass {
public void setCallback(ICallback callback) {
//...
callback.onCallback();
//...
}
}
public class AClass {
public static void main(String[] args) {
BClass b = new BClass();
b.setCallback(new ICallback() { //回调对象
@Override
public void onCallback() {//回调方法
System.out.println("Call back me.");
}
});
}
}
二,回调分类
回调可以分为同步回调和异步回调(或者延迟回调)。
同步回调
同步回调指在函数返回之前执行回调函数;异步回调指的是在函数返回之后执行回调函数。上面的代码实际上是同步回调的实现方式,在setCallback()函数返回之前,执行完回调函数 onCallback()。异步回调的例子:通过三方支付系统来实现支付功能,用户在发起支付请求之后,一般不会一直阻塞到支付结果返回,而是注册回调接口给三方支付系统,等三方支付系统执行完成之后,将结果通过回调接口返回给调用者。
异步回调
在Android中监听点击事件,肯定都用过;交互一般离不开事件的监听;
new Button(this).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("点击了按钮");
}
});
同步回调和异步回调的区别
从代码结构上来看,事件监听器很像回调,即传递一个包含回调函数(onClick())的对象给另一个函数。从应用场景上来看,它又很像观察者模式,即事先注册观察者(OnClickListener),当用户点击按钮的时候,发送点击事件给观察者,并且执行相应的 onClick() 函数,这里的回调是异步回调,我们往 setOnClickListener() 函数中注册好回调函数之后,并不需要等待回调函数执行。
从应用场景上来看,同步回调看起来更像模板模式,异步回调看起来更像观察者模式。
从代码实现上来看,回调和模板模式完全不同。回调基于组合关系来实现,把一个对象传递给另一个对象,是一种对象之间的关系;模板模式基于继承关系来实现,子类重写父类的抽象方法,是一种类之间的关系。