设为首页 加入收藏

TOP

浅析JDKObserver设计模式
2014-11-21 22:00:35 】 浏览:1695
Tags:浅析 JDKObserver 设计模式

  Java中JDK自带的JDK Observer设计模式的实现是一个范例,有助于我们在设计模式的思维上有所突破。目前设计模式的介绍性文章越来越多,但设计模式的研究性文章仍然比较欠缺,这着实让人觉得有点遗憾。本文旨在抛砖引玉。


  1.JDK Observer设计模式概要


  JDK Observer设计模式在GOF里属于行为设计模式。JDK里提供的observer设计模式的实现由java.util.Observable类和 java.util.Observer接口组成。从名字上可以清楚的看出两者在Observer 设计模式中分别扮演的角色:Observer是观察者角色,Observable是被观察目标(subject)角色。


  Observable是一个封装subject基本功能的类,比如注册observer(attach功能),注销 observer(detatch功能)等。这些功能是任何一个扮演observerable角色的类都需要实现的,从这一点上来讲,JDK里将这些通用功能专门封装在一个类里,显得合情合理。通常情况下,我们的类只要从Observerable类派生就可以称为observerable角色类,使用非常简单。


  2.使用JDK Observer设计模式存在的困难


  但我们不得不注意到,在项目实际开发当中,情况往往要复杂得多。java不支持多继承特性在很多时候是阻碍我们使用JDK Observer设计模式的绊脚石。比如说,我们设计的一个类已经是某个类的派生类,在这种情况下同时想让它扮演Observerable角色将变得麻烦。如何实现“多继承”的效果是摆在我们面前的一大难题。下面我们首先分析一下Observable类。


  3.JDK Observable类“触发通知”的原理


  Observable必须“有变化”才能触发通知observer这一任务,这是它的本质体现。查看源码便可知一二。


  Observerable部分源码如下:


  1.//……省略……


  2.private boolean changed = false;


  3.//……省略……


  4.public void notifyObservers(Object arg) {


  5.//……省略……


  6.Object[] arrLocal;


  7.synchronized (this) {


  8. //……省略……


  9. if (!changed)


  10.return;


  11.arrLocal = obs.toArray();


  12.clearChanged();


  13.}


  14.


  15.//……省略……


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Swing全屏幕模式 下一篇在表格中Swing增加列表框

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目