一.概念
在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
观察者模式也被称之为:主题-观察者模式,发布-订阅模式,前者是一,后者是多。
二.UML
- Subject(主题类),最主要的方法:添加/删除观察者,改变状态,通知观察者。
- Observer(观察者类),当主题状态改变,通知观察者时,触发观察者的update方法。
三.实例分析
《那些年,我们一起追的女孩》让我回到了高中,想到了以前的同桌,那个我暗恋N久的女孩子。那时候,我们一起下课,一起吃饭,一起逃课,一起翻 墙...往事啊,泪奔 ...好了,回归正题,再说要被大家喷了。我跟她是一个班,我们是一个班主任,班主任不在,我们可以嘻嘻哈哈玩玩耍耍,班主任来了,我们还是得收敛点。
对比一下概念:班主任是一,我和她是多,我们依赖班主任,班主任状态改变了(不在教室变成了在教室),我们就要做点改变了。
Teacher
- package com.zzy.observer;
- import java.util.Observable;
- /**
- * 主题
- * @author eason
- *
- */
- public class Teacher extends Observable{
- public void setChanged() {
- super.setChanged();
- }
- }
Student
- package com.zzy.observer;
- import java.util.Observable;
- import java.util.Observer;
- /**
- * 观察者
- * @author eason
- *
- */
- public class Student implements Observer{
- private String name;
- private String action;
- public Student(String name, String action) {
- this.name = name;
- this.action =action;
- }
- @Override
- public void update(Observable o, Object arg) {
- System.out.println(this);
- }
- @Override
- public String toString() {
- return "学生" + name + action;
- }
- }
TestObserver
- package com.zzy.observer;
- /**
- * 测试类
- * @author eason
- *
- */
- public class TestObserver {
- public static void main(String[] args) {
- //班主任
- Teacher teacher = new Teacher();
- //我和她
- Student stu1 = new Student("eason", "收起手机");
- Student stu2 = new Student("grace", "停止睡觉");
- //我跟她所属的班主任
- teacher.addObserver(stu1);
- teacher.addObserver(stu2);
- //老师来了
- teacher.setChanged();
- teacher.notifyObservers();
- }
- }
java.util.Observable和java.util.Observer比较简单,有兴趣大家自己去研究下。
四.使用场景
- 当一个对象的改变会引起其他对象的改变,这个时候,考虑观察者模式。比喻java.util.Swing中的事件监听。
五.使用感受
- java.util.Observable内部用一个Vector实现。学习的过程中,自己写一个Observable收获颇多。
- 松耦合,主题不知道观察者的具体细节(update方法的具体实现),只要你实现了观察者接口就行。
- 主题向观察者推数据。
相关推荐
51单片机控制的循迹避障小车,支持红外遥控,可以实现前进后退左右和循迹切换
ZY08-C循迹加红外避障综合程序代码
ZY Player APP :sparkles:特性 :hamburger:视频源支持自定义,支持链接引入 :hot_dog:播放历史,自动取消历史进度 :sandwich:支持搜索功能,搜索结果图片显示 :popcorn:支持收藏夹功能 :fried_shrimp:支持青...
智能小车的相关功能例程,并且有程序的注释,
ZY08-C循迹、红外避障、遥控综合程序代码
ZY-TP21便捷式打印机驱动是一款嵌入式微型打印机,这款打印机体积小,重量轻,噪音低,易集成,操作简单,可靠性强,这里介绍的正是针对这款打印机的驱动,ZY-TP21便捷式打印机驱动,有需要的朋友们快来下载吧。...
ZY3-01星SC产品命名规范20160217.pdf
该套设备采用ZY6400-23.5/45型液压支架,最大采高达4.5 m。由于十二矿井下主要巷道断面较小,支架必须解体入井安装,回采结束后支架回撤又面临一个新课题。针对这个难题,十二矿改革回收工艺,采取相应的安全措施,顺利地...
ZY-Player-Setup-2.6.4.exe
VMware Workstation7.1.2 build-301548汉化包 ...-------------------------------------------- ...VMware Workstation7.1.2 VM7.1.2注册机VM7.1.2汉化包 VM7.1.2序列号 VM7.1.2汉化包VMware Workstation7.1.2 VM7.1.2...
循迹小车的单片机程序。仅供参考大家互相学习,共同进步本次上传日志本次上传日志本次上传日志本次上传日志要求上传您自己觉得好的资料本次上传日志
RF-SJ-ZY-04-F08 采暖通风设计图纸审查标准及要点(1).zip
不用换找资源,本身自带资源搜索的播放器
吉林中易CMS【ZY-CMS】是一款开源免费asp内容管理系统,全站CSS div布局,为用户的修改提供方便,网站内容的每一个角落都可以在后台予以管理,是一套非常适合用做系统建站或者进行二次开发的程序核心。吉林中易CMS...
程序设计语言ZY1906-大作业.7z
RF-YX-ZY-07-F02 设计通知.zip
ZY-Player-Setup-2.6.1.exe
RF-SJ-ZY-06-F02 设计变更指令单.zip
RF-SJ-ZY-04-F01 设计评审表.zip