这阵子闲来有空,复习和深化一下java的设计模式,提高一下自己的能力,希望自己对java的理解更加深入一点。
observer模式是java中最为常见的模式之一。在java.util.Observable类,不过他是抽象类,这里我们demo把它声明为接口。现在演示一个最简单的一个demo,这里的场景是,学生作为观察者在考试,老师作为主题提醒学生该交卷了。具体实现是
1、抽象首先是,声明一个可观察接口/** * 可观察的 * @author studyjun * */public interface Observable { /** * 更新 */ public void update(); }
接着声明一个抽象主题,里面实现了提醒观察者方法
/** * 主题 * @author studyjun * */public abstract class Subject { Listobservers = new ArrayList (); //观察者列表 /** * 更新观察者 */ 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