`
zhu1xu2
  • 浏览: 4528 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

JAVA设计模式(一)观察者模式

阅读更多
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

主题和观察者定义了一对多的关系。观察者依赖于此主题,只要主题状态一有改变,观察者就会被通知。

类图:


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中的事件处理。
当组件状态(被观察者)发生改变时,通知监听器(观察者)处理对应事件。
  • 大小: 25.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics