前言
观察者模式属于行为型模式,又被称作发布/订阅模式。主要用来解耦,将观察者和被观察者解耦。
主要涉及四个角色:抽象观察者、具体观察者、抽象被观察者、具体被观察者。
代码实现
(1)创建抽象观察者:
/**
* 抽象观察者
*/
public interface Observer {
void update(String message);
}
(2)创建具体观察者:
/**
* 具体观察者
*/
public class Boy implements Observer {
private String name;
public Boy(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println("我是======="+name+",======收到了消息==="+message);
}
}
/**
* 具体观察者
*/
public class Girl implements Observer {
private String name;
public Girl(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println("我是======="+name+",======收到了消息==="+message);
}
}
(3)抽象被观察者
/**
* 抽象被观察者
*/
public interface Observable {
void add(Observer observer);//添加观察者
void remove(Observer observer);//移除观察者
void notifyData(String message);//通知观察者
}
(4)具体被观察者
public class Teacher implements Observable {
List<Observer> observerList=new ArrayList<>();
@Override
public void add(Observer observer) {//添加观察者
observerList.add(observer);
}
@Override
public void remove(Observer observer) {//移除观察者
observerList.remove(observer);
}
@Override
public void notifyData(String message) {//通知观察者
if (observerList!=null&&observerList.size()>0){
for (Observer observer:observerList){
observer.update(message);
}
}
}
}
(5)测试
public class TestMain {
public static void main(String[] args) {
Observable observable=new Teacher();
Observer boy=new Boy("张三");
Observer girl=new Girl("丽丽");
observable.add(boy);
observable.add(girl);
observable.notifyData("开学了");
}
}
输出结果:
我是=======张三,======收到了消息===开学了
我是=======丽丽,======收到了消息===开学了
Android中的常见的观察者模式
(1)button的setOnClickListener监听事件
(2)ListView的Adapter的notifyDataSetChanged()方法
(3)BroadcastReceiver
(4)RxJava、RxBus、RxAndroid、EventBus等