1、同步调用
同步调用是最基本的调用方式,即类 A 的方法 a() 调用类 B 的方法 b(),一直等待方法 b() 执行结束,方法 a() 才继续往下走。这是一种阻塞调用, 适用于方法 b() 执行时间不长的情况,如果方法 b() 执行时间过长或者直接阻塞的话,方法 a() 的余下代码是无法执行下去的。
2、异步调用
异步调用是为了解决同步调用存在阻塞情况而产生的一种调用方式。类 A 的方法 a() 通过创建新线程的方式调用类 B 的方法 b(),代码接着直接往下执行。这样方法 b() 在新线程中执行,就不会阻塞方法 a() 的执行。对于方法 a() 无需方法 b() 的返回结果,可以直接往下执行其他操作。对于需要方法 b() 的返回结果,通常可以借助回调机制实现。
3、回调
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
public interface MyOnClickListener {
// 回调函数
public void onClick();
}
public class MyButton {
MyOnClickListener listener;
public void setOnClickListener(MyOnClickListener listener) {
this.listener = listener;
}
/*
* 按钮被点击
*/
public void click() {
listener.onClick();
}
}
public class Client {
public static void main(String[] args) {
MyButton button = new MyButton();
// 注册监听器
button.setOnClickListener(new MyOnClickListener() {
@Override
public void onClick() {
System.out.println("按钮被点击了");
}
});
// 用户点击按钮
button.click();
}
}
4、观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
public interface Observer {
public void update();
}
public class Subject {
List<Observer> lists = new ArrayList<Observer>();
public void register(Observer observer) {
lists.add(observer);
}
public void notifyObservers() {
for(Observer observer : lists) {
observer.update();
}
}
public void unRegister(Observer observer) {
lists.remove(observer);
}
}
public class Client {
public static void main(String[] args) {
Subject subject = new Subject();
subject.register(new Observer() {
@Override
public void update() {
System.out.println("onserver 1 update");
}
});
subject.register(new Observer() {
@Override
public void update() {
System.out.println("observer 2 update");
}
});
subject.notifyObservers();
}
}
参考:https://www.jianshu.com/p/2615a4acb9ac