JAVA设计模式(一)观察者模式
程序员文章站
2022-05-30 12:06:31
...
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
主题和观察者定义了一对多的关系。观察者依赖于此主题,只要主题状态一有改变,观察者就会被通知。
类图:
JDK中已实现的观察者模式:Swing中的事件处理。
当组件状态(被观察者)发生改变时,通知监听器(观察者)处理对应事件。
主题和观察者定义了一对多的关系。观察者依赖于此主题,只要主题状态一有改变,观察者就会被通知。
类图:
package com.zaxk.study.pattern; import java.util.Observable; import java.util.Observer; /** * 观察者模式 * Created by ZhuXu on 2017/11/9 0009. */ public class ObserverTest { public static void main(String[] args) { School school = new School(); Student student = new Student(school); Teacher teacher = new Teacher(school); school.notice(); } } /** * 观察者:学生 */ class Student implements Observer { Observable observable; public Student(Observable observable) { this.observable = observable; observable.addObserver(this); } @Override public void update(Observable o, Object arg) { if (o instanceof School) { System.out.println("Student 收到通知:" + ((School) o).getNotice()); } } } /** * 观察者:老师 */ class Teacher implements Observer { Observable observable; public Teacher(Observable observable) { this.observable = observable; observable.addObserver(this); } @Override public void update(Observable o, Object arg) { if (o instanceof School) { System.out.println("Teacher 收到通知:" + ((School) o).getNotice()); } } } /** * 被观察者:学校 */ class School extends Observable { String notice; public void notice() { setNotice("放假通知:1~7号放假"); setChanged(); notifyObservers(); } public String getNotice() { return notice; } public void setNotice(String notice) { this.notice = notice; } }
JDK中已实现的观察者模式:Swing中的事件处理。
当组件状态(被观察者)发生改变时,通知监听器(观察者)处理对应事件。