观察者模式
来源:互联网 发布:无线网测试软件 编辑:程序博客网 时间:2024/06/06 19:04
观察者模式
观察者模式就是一种 “发布者-订阅者”的模式。有时也被称为 “模型-视图”模式, “源-监听者” 模式等。在这种模式中,由一个目标对象来管理所有依赖于它的观察者对象,并且当这个目标对象自身发生改变时,会主动向它的观察者们发出通知。
观察者模式类图
比如你最近在追一个美剧《生活大爆炸》, 假设著名在线视频网站某狐买下独家版权,在线更新与播放。于是你天天等,等他的更新通知一来,你就去看那些最新的视频。
` public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyAllObservers(); } //观察者接口 public interface Observer { public void update(Subject s); } //视频网站某狐 实现 Subject 接口 public class VideoSite implements Subject { //观察者列表 以及 更新了的视频列表 private ArrayList<Observer> userList; private ArrayList<String> videos; public VideoSite() { userList = new ArrayList<Observer>(); videos = new ArrayList<String>(); } public void registerObserver(Observer o) { userList.add(o); } public void notifyAllObservers() { for (Observer o: userList) o.update(this); } public void addVideos(String video) { this.videos.add(video); notifyAllObservers(); } public ArrayList<String> getVideos() { return videos; } public String toString() { return videos.toString(); } } //实现观察者,即看视频的美剧迷们 public class VideoFans implements Observer { private String name; public VideoFans(String name) { this.name = name; } public void update(Subject s) { System.out.println(this.name + ",new videos are available!"); System.out.println(s); } } public class Main { public static void main(String[] args) { VideoSite vs = new VideoSite(); vs.registerObserver(new VideoFans("LiLei")); vs.registerObserver(new VideoFans("HanMeimei"); vs.registerObserver(new VideoFans("XiaoMing")); //add videos vs.addVideos("Video 1"); } }`
阅读全文
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- mybatis使用foreach语句实现IN查询
- 用深度学习(CNN RNN Attention)解决大规模文本分类问题
- Android新手上路-Apt技术的相关笔记
- 为什么String是不可变的
- 1193: [HNOI2006]马步距离
- 观察者模式
- MapReduce实例----排序
- eclipse debug启动很慢
- NYOJ 125 盗梦空间
- http协议讲解
- flash---星星闪
- DOM
- CodeForces 787A A. The Monster(扩展欧几里得)
- codeforces 811 E Vladik and Entertaining Flags(线段树+并查集)