观察者模式
来源:互联网 发布:linux jdk1.7安装教程 编辑:程序博客网 时间:2024/05/18 03:25
观察者模式定义了对象之间的一对多关系,一个Observable(被观察者)和多个(观察者);
(Observable)主题(也就是可观察者)用一 个共同的接口来更新观察者
观察者和可观察者之间用松 耦合方式结合(loosecoupling),可观察者不知道观察 者的细节,只知道观察者实现 了观察者接口。
使用此模式时,你可从被观察 者处推(push)或拉(pull) 数据(然而,推的方式被认为 更“正确”)
有多个观察者时,不可以依赖 特定的通知次序
Swing大量使用观察者模式,许多GUI框架也是如此。(java的Swing中,addActionListenner就是一种观察者模式实现)。
此模式也被应用在许多地方, 例如:JavaBeans、RMI。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
下面这个是主题,也就是被观察者,只要它改变就会通知观察者它变了。
import java.util.Observable;public class QuestionObservable extends Observable {private boolean isHaveQuest;public void haveQuestion() {setChanged();notifyObservers();}public void setQuestion(boolean arg) {isHaveQuest = arg;if (isHaveQuest)haveQuestion();}}
-----------------------------------------------------------------------------
下面是观察者:恶魔.java ,当我有疑问了,恶魔就会回答我:
import java.util.Observable;import java.util.Observer;public class Devil implements Observer {Observable ob;public Devil(Observable o) {ob = o;ob.addObserver(this);}@Overridepublic void update(Observable o, Object arg) {// TODO Auto-generated method stubif (o instanceof QuestionObservable) {display();}}private void display() {// TODO Auto-generated method stubSystem.out.println("Come on ,do it!");}}
--------------------------------------------------------------------------------------------------------------------
同样,我还有一个观察者:天使类.java,它也会在我有疑问回答我:
import java.util.Observable;import java.util.Observer;public class Angel implements Observer {Observable o;public Angel(Observable o) {this.o = o;o.addObserver(this);}@Overridepublic void update(Observable o, Object arg) {// TODO Auto-generated method stubif (o instanceof QuestionObservable) {display();}}private void display() {// TODO Auto-generated method stubSystem.out.println("Do not do it,be nice ");}}
----------------------------
main.java---------》
public class Fascinate {public static void main(String[] args) {// TODO Auto-generated method stubQuestionObservable ob = new QuestionObservable();Angel angel = new Angel(ob);Devil devil = new Devil(ob);ob.setQuestion(true);}}
阅读全文
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- OpenDaylight-Boron学习笔记: 4 OVSDB模块
- pyspider爬虫框架无法返回datetime对象的问题
- 解决Mac上adb: command not found问题
- Oracle 语句查找注释
- Android Studio文件编码问题: 编码xxxx的不可映射字符
- 观察者模式
- 结构体实现通讯录简单版
- STM32 SPI通信时钟极性和相位设置
- 一天一个Linux命令:mv
- GitHub上README.md教程
- 斯坦福大学cs229Andrew ng的机器学习课程
- python 的numpy库中的mean()函数用法
- eclipse属性配置(背景色字体等)文件的导入导出方法
- Monocular slam 中的理论基础(2)