前言
观察者模式是指定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
定义观察者接口
public abstract class BaseObserver {
/**
* 观察的是谁
*/
Subject subject;
/**
*观察到改变,进行更新
*/
abstract void update();
}
观察者实现类
public class ObserverOne extends BaseObserver {
@Override
void update() {
System.out.println("ObserverOne:changed");
}
}
public class ObserverTwo extends BaseObserver{
@Override
void update() {
System.out.println("ObserverTwo:changed");
}
}
public class ObserverThree extends BaseObserver{
@Override
void update() {
System.out.println("ObserverThree:changed");
}
}
定义被观察者类
import java.util.ArrayList;
/**
* @author 阳光大男孩!!!
* 被观察者类
*/
public class Subject {
private ArrayList<BaseObserver> baseObservers;
public Subject() {
baseObservers = new ArrayList<>();
}
/**
* 察觉到改变
*/
public void change()
{
notifyAllObserver();
}
/**
* 添加观察者
* @param baseObserver
*/
public void attachObserver(BaseObserver baseObserver)
{
this.baseObservers.add(baseObserver);
}
/**
* 让所有的观察者进行改变
*/
public void notifyAllObserver()
{
for(BaseObserver observer:baseObservers)
{
observer.update();
}
}
}
对被观察者进行改变
public static void main(String[] args) {
Subject subject = new Subject();
subject.attachObserver(new ObserverOne());
subject.attachObserver(new ObserverTwo());
subject.attachObserver(new ObserverThree());
subject.change();
}
其他观察者会察觉到改变,从而进行改变。
ObserverOne:changed
ObserverTwo:changed
ObserverThree:changed
当一个对象状态的改变需要其他对象相应进行改变时,我们就需要观察者模式耦合带来的这种触发机制
使用场景举例
例如在操作系统设计文件系统中,对一个文件的文件名进行改变时,并不是只是文件自身对象属性的变更,还有目录对象的改变等等。
阳光大男孩!!! 发布了210 篇原创文章 · 获赞 101 · 访问量 4万+ 私信 关注