应用场景:监控被观察者。如:上学的时候,暗恋个女孩,又没有啥渠道第一时间获取这个女孩的动态,这时候闺蜜成了关键,完全可以通过她的闺蜜(观察者)去了解她的动态,比如今晚她和闺蜜一起逛街,通过闺蜜知道她买了啥或者做了其他啥动作
被观察者:暗恋对象
import java.util.Observable;
public class AnLianDuiXiang extends Observable {
public void doSomething(){
System.out.println("走进优衣库的门店!");
super.setChanged();
super.notifyObservers("在优衣库买衣服,和一个男的进试衣间了");
}
}
观察者:暗恋对象的闺蜜
import java.util.Observable;
import java.util.Observer;
public class GuiMi implements Observer {
@Override
public void update(Observable o, Object arg) {
tellYou(arg.toString());
}
public void tellYou(String msg) {
System.out.println("闺蜜告诉你她的动态:" + msg);
}
}
调用者:你
public class Client {
public static void main(String[] args) {
AnLianDuiXiang she = new AnLianDuiXiang();
she.addObserver(new GuiMi());
she.doSomething();
}
}
运行结果(你的心从吐鲁番一下子到了太平洋最深处):
走进优衣库的门店!
她的动态:在优衣库买衣服,和一个男的进试衣间了
当然,也许当晚和她一起的不止一个闺蜜(观察者)也不一定,所以所有的当晚在场的闺蜜,都知道她去了试衣间了。。。
Observable(可观察对象)和 Observer(观察者)是Java的util包下自带的,被观察者继承Observable,即可通过setChanged方法触发事件,通过notifyObservers向所有观察者发送消息,观察者实现Observer接口,重载update方法获取消息,你(Client)只需要指定需要监控谁就行了。
观察者模式在现实应用中使用很广泛,除了监听暗恋对象外,在银行的ATM取款输入密码错误次数过多时,会执行吞卡动作,此时摄像头进行连续快拍和通知监控系统开始吞卡都是通过观察者模式实现的,Java中的消息队列其实就是观察者模式的升级,有兴趣的可以瞅瞅。