GOF23设计模式之观察者模式的理解与实现2(使用java自带的观察者类和接口)
2015-04-17 22:14
671 查看
观察者模式Observer
广播机制的场景:
场景:
聊天室程序的创建。服务器创建好后,A,B,C三个客户端连上来公开聊天。A向服务器发送数据,服务器端聊天数据改变。我们希望将这些聊天数据分别发给其他在线的客户。也就是说,每个客户端需要更新服务器端得数据。
网站上,很多人订阅了“Java主题”的新闻。当有这个主题新闻时,就会将这些新闻发给所有订阅的人。
大家一起玩CS游戏时,服务器需要将每个人的方位变化发给所有的客户
上面这些场景,我们都可以使用观察者模式来处理。我们可以把多个订阅者,,客户称之为观察者:需要同步给多个订阅者的数据封装在对象中,称之为目标。
核心:
观察者模式主要用于1:N的通知。当一个对象(目标对象Subject或者ObjServable)的状态变化时,他需要及时告知一系列对象(观察者对象,Observer),令他们做出响应
通知观察者的方式:
推:
每次都会把通知以广播方式发送给所有观察者,所有观察者只能被动接受
拉:
观察者只要知道有情况变化即可至于什么时候获取内容获取什么内容,都可以自主决定。
Java.util.Observable和java.util.Observer来实现观察者模式
开发中常见场景:
聊天室程序的,服务器转发给所有的客户端
网络游戏(多人联机对战)场景中,服务器将客户端的状态进行分发
邮件订阅
Servelet中,监听器的实现
JDK中的AWT中事件处理模型,基于观察者模式的委派时间模型(Delegation)Event Model
事件源:======目标对象
事件监听器============观察者
======================================
package com.bjsxt.cn.observer2;
import java.util.Observable;
public class ConcreteSubject extends Observable{ private int state;
public void setState(int state) { this.state = state; setChanged(); notifyObservers(state); } public int getState() { return state; }
public ConcreteSubject(int state) { super(); this.state = state; setChanged(); notifyObservers(state); } @Override public void notifyObservers() { super.notifyObservers(); }}
======================================
package com.bjsxt.cn.observer2;
import java.util.Observable;import java.util.Observer;
public class ObserverA implements Observer {
private int state; public int getState() { return state; }
public void setState(int state) { this.state = state; }
@Override public void update(Observable arg0, Object arg1) { setState(((ConcreteSubject)arg0).getState()); }
}====================================
相关文章推荐
- 使用观察者模式实现Java应用程序设计MVC模式
- 使用java类库中的Observable类和Observer接口实现观察者模式(精简版)
- Java常用类库--观察者设计模式( Observable类Observer接口)
- 一个简易的java自带的观察者模式实现
- 简单理解遵循接口隔离原则的Java设计模式编程
- 举例说明Java设计模式编程中ISP接口隔离原则的使用
- 如何使用 Java8 实现观察者模式?(上)
- 如何使用 Java8 实现观察者模式?(上)
- 如何使用 Java8 实现观察者模式?(下)
- 如何使用 Java8 实现观察者模式?(下)
- 使用Java8实现观察者模式的方法(上)
- 使用 Java8 实现观察者模式的方法(下)
- 如何使用 Java8 实现观察者模式?(上)
- Java常用类库--观察者设计模式( Observable类Observer接口)
- 如何使用 Java 8 实现观察者模式
- 如何使用 Java8 实现观察者模式
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- 设计模式之第18章-观察者模式(Java实现)
- 观察者设计模式(Observable类Observer接口)的实现demo
- GOF23设计模式之命令模式(Command)的理解与实现