您的位置:首页 > 其它

observer pattern--观察者模式入门

2014-11-27 14:20 253 查看
这阵子闲来有空,复习和深化一下java的设计模式,提高一下自己的能力,希望自己对java的理解更加深入一点。
observer模式是java中最为常见的模式之一。
在java.util.Observable类,不过他是抽象类,这里我们demo把它声明为接口。



现在演示一个最简单的一个demo,这里的场景是,学生作为观察者在考试,老师作为主题提醒学生该交卷了。具体实现是
1、抽象
首先是,声明一个可观察接口

/**
* 可观察的
* @author studyjun
*
*/
public interface Observable {

/**
* 更新
*/
public void update();

}

接着声明一个抽象主题,里面实现了提醒观察者方法

/**
* 主题
* @author studyjun
*
*/
public abstract class Subject {

List<Observable> observers = new ArrayList<Observable>(); //观察者列表

/**
* 更新观察者
*/
public void notifyObserver(){
for (Observable observer : observers) {
observer.update();

}
}

/**
* 添加观察者
* @param observerable
*/
public void addObserver(Observable observable){
observers.add(observable);
}

/**
* 移除观察者
*/
public void removeObserver(Observable observable){
observers.remove(observable);
}
}

2、实现
教师主题
/**
*
* 老师
* @author studyjun
*
*/
public class Teacher extends Subject {

/**
* 提醒收卷
*/
@Override
public void notifyObserver() {
System.out.println("答题结束,请同学上交试卷");
super.notifyObserver();
System.out.println("答题结束,收卷完毕");
}
}

学生类

**
*
* 学生
* @author studyjun
*
*/
public class Student implements Observable {

/**
* 持有一个教师引用
*/
private Teacher teacher;

public Student(Teacher teacher){
this.teacher = teacher;
this.teacher.addObserver(this);
}

/**
* 学生收卷
*/
@Override
public void update() {
System.out.println("学生"+hashCode()+"收卷");
}

}

3、测试实现

public class Test {

public static void main(String[] args) {

Teacher teacher = new Teacher(); //主题类

Student s1 = new Student(teacher); //添加观察者
Student s2 = new Student(teacher);
Student s3 = new Student(teacher);
Student s4 = new Student(teacher);
Student s5 = new Student(teacher);
Student s6 = new Student(teacher);

teacher.notifyObserver(); //提醒观察者

}
}

以上就是Observer Pattern 的实现方式,具体代码可以参考,如下 https://github.com/music60/ObserverPatternSimple.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: