JAVA观察者模式

1. JAVA中通过使用 java.util.Observable类 和 java.util.Observer接口 来实现观察者模式

实例:老师有10个学生,10个学生都有老师的电话号码,当老师换电话了,通知所有学生更新自己的电话簿

2. 创建被观察者类(Teacher)继承java.util.Observable类

public class Teacher extends Observable{

    //老师的电话号码
    private String phone;

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
        //老师换电话了,通知所有学生
        this.setChanged();
        this.notifyObservers();
    }
    
}

3. 创建观察者类(Student)实现java.util.Observer接口

import java.util.Observable;
import java.util.Observer;

public class Student implements Observer{

    //学生的名字
    private String name;
    
    public Student(String name){
        this.name = name;
    }
    
    @Override
    public void update(Observable o, Object arg) {
        Teacher teacher = (Teacher) o;
        System.out.println(this.name+"  "+teacher.getPhone());
    }

}

4. 测试类

public class Test {

    public static void main(String[] args) {
        //这是老师
        Teacher teacher = new Teacher();
        
        //老师有10个学生
        for(int i = 1;i<=10;i++){
            Student student = new Student("小"+i);
            teacher.addObserver(student);
        }
        
        //老师换电话了
        teacher.setPhone("110");
        System.out.println("~~~~~~~~~~~~~");
        
        //老师又换电话了
        teacher.setPhone("119");
    }
}

5. 测试结果

小10 110
小9 110
小8 110
小7 110
小6 110
小5 110
小4 110
小3 110
小2 110
小1 110
~~~~~~~~~~~~~
小10 119
小9 119
小8 119
小7 119
小6 119
小5 119
小4 119
小3 119
小2 119
小1 119

结果:老师两次更新电话号码,都会通知所有学生调用update方法,更新自己的电话簿

posted @ 2015-04-21 15:30  jerry心  阅读(150)  评论(0编辑  收藏  举报