observer pattern--观察者模式入门
2014-11-27 14:20
253 查看
这阵子闲来有空,复习和深化一下java的设计模式,提高一下自己的能力,希望自己对java的理解更加深入一点。
observer模式是java中最为常见的模式之一。
在java.util.Observable类,不过他是抽象类,这里我们demo把它声明为接口。
现在演示一个最简单的一个demo,这里的场景是,学生作为观察者在考试,老师作为主题提醒学生该交卷了。具体实现是
1、抽象
首先是,声明一个可观察接口
接着声明一个抽象主题,里面实现了提醒观察者方法
2、实现
教师主题
学生类
3、测试实现
以上就是Observer Pattern 的实现方式,具体代码可以参考,如下 https://github.com/music60/ObserverPatternSimple.git
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
相关文章推荐
- DP-观察者模式(Observer Pattern)
- Observer Pattern(观察者模式)及其在C#中的实现
- Java与模式 观察者模式Observer Pattern
- 设计模式17:Observer Pattern (观察者模式)
- Observer pattern 观察者模式
- 18.观察者模式(Observer Pattern)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 设计模式之观察者模式(Observer Pattern)(一)
- .NET设计模式(19):观察者模式(Observer Pattern)
- 《Head First Design Patterns》笔记二:观察者模式(Observer Pattern)
- Observer Pattern(观察者模式)及其在C#中的实现
- 我读设计模式之观察者模式(Observer Pattern)
- 重构到观察者模式 Refactor to Observer Pattern
- 观察者模式(Observer Pattern)
- .NET设计模式(19):观察者模式(Observer Pattern)
- 观察者模式 Observer Pattern — 三国演义之超级间谍战 — 美女貂蝉的故事
- 设计模式系列之三:观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 设计模式之观察者模式(Observer Pattern)(二)
- .NET设计模式(19):观察者模式(Observer Pattern)