设计模式学习二:观察者模式
一.概念
???? 在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
???? 观察者模式也被称之为:主题-观察者模式,发布-订阅模式,前者是一,后者是多。
?
二.UML
三.实例分析
???? 《那些年,我们一起追的女孩》让我回到了高中,想到了以前的同桌,那个我暗恋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;}@Overridepublic void update(Observable o, Object arg) {System.out.println(this);}@Overridepublic 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比较简单,有兴趣大家自己去研究下。
?
四.使用场景
五.使用感受