`
yangyou230
  • 浏览: 1652965 次
文章分类
社区版块
存档分类

Observer模式相关类

 
阅读更多
这是位于jdk包java.util中的类,该类实现了简单的Observer模式中的ConcreateSubject角色。Observable类使用Vector保存一组Observer的引用。
提供了添加和删除这些Observer引用的方法:
publicsynchronizedvoid addObserver(Observer o)//添加一个Observer
publicsynchronizedvoid deleteObserver(Observer o)//删除一个Observer
publicsynchronizedvoid deleteObservers()//删除所有的Observer
你还可以统计有多少个Observer对象要求被通知,通过下面的方法:
publicsynchronizedint countObservers()
Observeable对象有一个布尔域,用来表示是否有数据发生改变(只有为真时才需要通知Observer对象),同时还提供了操纵这个域的方法:
privatebooleanchanged = false;
protectedsynchronizedvoid setChanged() {
changed = true;
}
protectedsynchronizedvoid clearChanged() {
changed = false;
}
publicsynchronizedboolean hasChanged() {
returnchanged;
}
当真的有数据发生改变的时候,就需要通知Observer对象,使用下面的两个方法:
publicvoid notifyObservers() {
notifyObservers(null);
}
publicvoid notifyObservers(Object arg) {
Object[] arrLocal;
synchronized (this) {
if (!changed)
return;
arrLocal = obs.toArray();
clearChanged();
}
for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this, arg);
}
注意,这里除了构造函数所有的方法都是线程安全的,所以如果你只是在单线程环境里面使用Observer模式,出于性能的原因,或许需要寻找另外的解决方案。一个对象要想作为Observer被通知,它就需要实现自己的update方法。
Observer接口
publicinterface Observer {
void update(Observable o, Object arg);
}
上面说到,“一个对象要想作为Observer被通知,它就需要实现自己的update方法。,因此jdk也提供了一个Observer接口,你的类可以实现它,成为一个observer对象。
分享到:
评论

相关推荐

    观察者模式相关

    在对象之间定义了一对多的依赖关系 这样一来 当一个对象改变状态时 依赖它的对象都会收到通知并自动跟新 Java已经提供了对观察者Observer模式的默认实现 Java对观察者模式的支持主要体现在Observable类和Observer...

    第4讲_Observer模式

    将一个系统分割成一系列相互协作的类有一个常见的副作用:需要维护相关对象间的一致性。我们不希望为了维持一致性而使得各个类紧密耦合,导致可重用性的降低。 观察者模式使得任意数目的观察者不必知道彼此的存在,...

    c++设计模式全系列+应用场景+实例说明

    3. **观察者模式(Observer Pattern)**:观察者模式是一种行为设计模式,定义了对象间的一对多依赖关系,使得当一个对象状态发生改变时,其相关依赖对象都会收到通知并自动更新。 4. **装饰者模式(Decorator ...

    设计模式:可复用面向对象软件的基础--详细书签版

    —类行为型模式 214 5.11 visitor(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 5.12.4 对发送者和接收者...

    GoF 的 23 种设计模式

    观察者(Observer)模式:多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为。 中介者(Mediator)模式:定义一个中介对象来简化原有对象之间的交互关系,...

    敏捷软件开发:原则、模式与实践.pdf 高清

    第二十四章 OBSERVER模式——回归为模式 第二十五章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 第二十六章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API 第二十七章 案例研究:气象站 第Ⅵ部分 ETS案例...

    java设计模式选择题复习题.doc

    工厂系列模式的优缺点: 让用户的代码和某个特定类的子类的代码解耦 用户不必知道它所使用的对象是怎样创建的,只需知道该对象有哪些方法 抽象工厂模式可以为用户创建一系列相关的对象,使用户和创建这些对象的类脱...

    二十三种设计模式【PDF版】

    设计模式之 Template(模板方法) 实际上向你介绍了为什么要使用 Java 抽象类,该模式原理简单,使用很普遍. 设计模式之 Strategy(策略) 不同算法各自封装,用户端可随意挑选需要的算法. 设计模式之 Chain of ...

    23个软件设计类图详解.rar

    1、Abstract Factory 抽象工厂 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 2、Builder 生成器 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 3、...

    Java设计模式(含代码)

    Java设计模式 (含有相关源码) Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Adapter:将一个类的接口转换成客户希望的另一个接口,使得原来由于接口不兼容而不能...

    java 设计模式资料

    Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Adapter:将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容而不能一起工作的...

    .NET之美:.NET关键技术深入分析

    3.8不使用委托实现Observer模式 3.8.1设计思想概述 3.8.2 Observer模式的接口定义 3.8.3 Observer模式的实现 3.8.4推模式和拉模式 3.8.5推模式和拉模式的区别 3.9本章小结 第4章对象的筛选和排序 4.1对象的...

    深入理解观察者模式-Java设计模式及应用案例(第2版)-[共5页].pdf

    } } (5)一个简单的测试类 Test public class Test { public static void main(String[] args) { IObserver obs = new Observer(); //定义观察者对象 Subject subject = new Subject(); //定义主题对象 subject....

    asp.net知识库

    如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/...

    摩托罗拉C++面试题

    1.介绍一下STL,详细说明STL如何实现vector。 Answer: STL (标准模版库,Standard ...MVC模式是observer 模式的一个特例,典型的有MFC里面的文档视图架构。 18,多重继承如何消除向上继承的二义性。 使用虚拟继承即可.

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    java面试800题

    template模板方法模式、memento备忘录模式、observer观察者模式、command命令模式、state状态模式、strategy策略模式、mediator调停者模式、interpreter解释器模式、visitor访问者模式、chain of responsibility责任...

    CSDN 微软技术高级讲师.NET技术企业高级培训PPT

    (9) 数据库相关控件的使用DataGridView控件 (10) DataGridView-显示数据基本方法 (11) DataGridView使用动态编程显示数据 (12) DataGridView保存修改后的数据关键知识 (13) 事务处理 (14) Sql 基本语法...

    dot NET技术企业高级培训PPT

    (9) 数据库相关控件的使用DataGridView控件 (10) DataGridView-显示数据基本方法 (11) DataGridView使用动态编程显示数据 (12) DataGridView保存修改后的数据关键知识 (13) 事务处理 (14) Sql 基本语法...

    超级有影响力霸气的Java面试题大全文档

    新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装:  封装...

Global site tag (gtag.js) - Google Analytics