首页 > 代码库 > 观察者模式
观察者模式
- 定义
观察者模式定义了对象之间的一对多依赖,当一个对象改变时,所以依赖于它的对象都会得到通知。
- 示例
interface Observer { void update(int data); } class NewsPaper { private LinkedList<Observer> observers; public NewsPaper() { observers = new LinkedList<>(); } public void subscribe(Observer o) { observers.add(o); } public void unsubscribe(Observer o) { observers.remove(o); } public void changeData(int data) { for (Observer o : observers) { o.update(data); } } } class Reader implements Observer { private String name; public Reader(NewsPaper paper, String name) { this.name = name; paper.subscribe(this); } @Override public void update(int data) { System.out.println(name + " update data:" + data); } } public class TestObserve { public static void main(String[] args) { NewsPaper newsPaper = new NewsPaper(); Reader tom = new Reader(newsPaper, "tom"); Reader jack = new Reader(newsPaper, "jack"); newsPaper.changeData(10); System.out.println("--"); newsPaper.unsubscribe(tom); newsPaper.changeData(5); } }
所有 Reader 都是观察者,当他订阅了 NewsPaper 后。NewsPaper 一有新数据,就会通知所有订阅了它的 Reader。
- 为什么
为什么要使用观察者模式?因为在初始化被观察者时,并不知道当数据变化时,需要通知谁。需要通知的对象是动态变化的。
- 谁还用了观察者模式
在 GUI 编程时,我们想要在事件被触发时,执行我们指定的动作。例如想在按钮被点击时弹窗口,就可以通过类似AddListener
,将已经实现相应接口的对象添加到按钮的“订阅列表”中,当按钮被点击时,系统会依次调用“订阅列表”中对象的相应方法。弹窗口因此被触发。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。