博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
observer pattern--观察者模式入门
阅读量:6897 次
发布时间:2019-06-27

本文共 2218 字,大约阅读时间需要 7 分钟。

hot3.png

这阵子闲来有空,复习和深化一下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
 observers = 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

转载于:https://my.oschina.net/studyjun/blog/349405

你可能感兴趣的文章
为什么你的路由器穿墙能力差?看完秒懂
查看>>
漫谈数据库索引
查看>>
RTP与RTCP协议介绍
查看>>
这家创业公司,为什么会在云栖大会上被反复提及?
查看>>
如何使用Unhook技术绕过安全软件的防护?
查看>>
运营商5G服务开跑?你不要被骗了!
查看>>
WCF后续之旅(4):WCF Extension Point 概览
查看>>
Alibaba Cloud and UK Met Office to Co-organise Tianchi Data Mining Contest
查看>>
SCALA表达示简例
查看>>
现代数据中心如何满足超高速互联的全球经济的需要?
查看>>
AI 如何保障校园安全?安防“老大”海康威视是这么做的
查看>>
【阿里云资讯】如何让云计算安全变得更“聪明”
查看>>
[LeetCode]--12. Integer to Roman
查看>>
阿里巴巴 江苏总部将落户南京
查看>>
为什么用Yarn来做Docker容器调度引擎
查看>>
Eclipse 扩展点常量ID
查看>>
MySQL · 引擎特性 · InnoDB 事务锁系统简介
查看>>
Android开发艺术探索——新的征程,程序人生路漫漫!
查看>>
java 如何读取src根目录下的属性文件
查看>>
.Net 垃圾回收机制原理(二)
查看>>