GOF23设计模式之观察者模式的理解与实现2(使用java自带的观察者类和接口)


观察者模式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());
 }
}
====================================
				
时间: 2024-10-11 11:26:32

GOF23设计模式之观察者模式的理解与实现2(使用java自带的观察者类和接口)的相关文章

GOF23设计模式之观察者模式之理解

 观察者模式Observer      广播机制的场景:      场景:          聊天室程序的创建.服务器创建好后,A,B,C三个客户端连上来公开聊天.A向服务器发送数据,服务器端聊天数据改变.我们希望将这些聊天数据分别发给其他在线的客户.也就是说,每个客户端需要更新服务器端得数据.          网站上,很多人订阅了"Java主题"的新闻.当有这个主题新闻时,就会将这些新闻发给所有订阅的人.          大家一起玩CS游戏时,服务器需要将每个人的方位变化发给

【GOF23设计模式】观察者模式

来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_观察者模式.广播机制.消息订阅.网络游戏对战原理 1 package com.test.observer; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Subject { 7 protected List<Observer> list = new ArrayList<Observer>(); 8 9 p

GOF23设计模式之观察者模式(observer)

一.观察者模式概述 观察者模式主要用于 1 :N 的通知.当一个对象(目标对象 Subject 或 Observable)的状态变化时,它需要通知一系列对象(观察者对象 Observer),令它们做出响应. 通知观察者的方式: (1)推   每次都会把通知以广播的方式发送给所有观察者,所有观察者只能被动接收. (2)拉   观察者只要知道有情况即可.至于什么时候获取内容,获取哪些内容,都可以自主决定. 二.观察者模式示例代码 1 /** 2 * 观察者对象接口 3 * @author CL 4

GOF23设计模式之迭代器模式理解与实现

 迭代器模式      场景:          提供一种可以遍历聚合对象的方式.又称为游标cursor模式          聚合对象:存储数据          迭代器模式:遍历数据   聚集抽象类 Aggregate Iterator 迭代抽象类,用于定义得到开始对象,得到下一个对象,判断是否到结尾,当前对象等抽象方法,统一接口 具体聚集类:继承Aggregate 具体迭代器类,继承Iterator,实现开始,下一个,是否结尾,当前对象等方法.   使用场景:      前向迭代器  

理解java设计模式之观察者模式

在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的“观察者模式”,它适合解决多种对象跟踪一个对象数据变化的程序结构问题. 观察者设计模式涉及到两种角色:主题(Subject)和观察者(Observer) 下面以java JDK中已有的观察者设计模式代码,展示使用: 1.主题(Subject):Observable类派生出来的子类,只需要定义各被监控的数据及getter

GoF23:设计模式概述

目录 学习设计模式的意义 GoF23 创建型模式(5种) 结构型模式(7种) 行为型模式(11种) OOP七大原则 开闭原则(总的纲领) 里氏替换原则 依赖倒置原则 单一职责原则 接口隔离原则 迪米特法则 合成复用原则 学习设计模式的意义 ? 设计模式的本质是对面向对象设计原则的实际运用,是对类的封装性.继承性和多态性以及类的关联关系和组合关系的充分理解. ? 提高抽象思维能力.知道它的应用场景 ? 软件设计模式只是一种引导,要根据实际的业务做出恰当的选择 设计模式的基本要素: 模式名称 问题

设计模式:观察者模式

设计模式:观察者模式 : http://www.cnblogs.com/li-peng/archive/2013/02/04/2892116.html 观察者模式是我们经常用的一个模式,比如在用wcf做服务的时候通知客户端做一些操作一般用设计者模式. 今天做一个订报纸的小例子来理解一下观察者模式  出版者+订阅者=观察者模式 用下边的图来说就是    人民日报+订阅者=观察者模式 只要是订阅了人民日报的人,有了新报纸就会送到订阅者那里去, 当你不想订的时候取消就不订阅就不会再收到报纸了. //报

设计模式之观察者模式(Observer)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

C#设计模式(17)——观察者模式(Observer Pattern)

原文:C#设计模式(17)--观察者模式(Observer Pattern) 一.引言 在现实生活中,处处可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这些都属于观察者模式的应用.在这一章将分享我对观察者模式的理解,废话不多说了,直接进入今天的主题. 二. 观察者模式的介绍 2.1 观察者模式的定义 从生活中的例子可以看出,只要对订阅号进行关注的客户端,如果订阅号有什么更新,就会直接推送给订阅了的用户.从中,我们就可以得出观察者模式的定义. 观察者模式定义了一种一对多的依赖