定义
定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,
当主题对象发生变化时,它的所有依赖者收到通知并更新
package com.cbx.Observer;
import java.util.ArrayList;
import java.util.List;
/**
* @Author:cbx
* @Date:2020/10/22/14:02
*/
public class ObserverTest {
public static void main(String[] args) {
Subject subject=new Subject();
Task1 task1=new Task1();
Task2 task2=new Task2();
subject.addObserver(task1);
subject.addObserver(task2);
subject.notifyObserver("message");
}
}
class Subject{
//容器
private List<Observer> container=new ArrayList<>();
//add
public void addObserver(Observer observer){
container.add(observer);
}
//remove
public void removeOberver(Observer observer){
container.remove(observer);
}
public void notifyObserver(Object object){
for (Observer item : container) {
item.update(object);
}
}
}
interface Observer{
//观察者的更新
void update(Object obj);
}
class Task1 implements Observer{
@Override
public void update(Object obj) {
System.out.println("task1 receive "+obj);
}
}
class Task2 implements Observer{
@Override
public void update(Object obj) {
System.out.println("task2 receive "+obj);
}
}
应用场景
当更改一个对象的状态可能需要更改其他对象,并且实际的的对象集事先未知或动态更改时,使用观察者模式
JDK&Spring场景应用
jdk 中 :java.uitl.Observable
spring中: ApplicationListener