浅析Java设计模式——观察者模式

观察者模式属于行为型模式的一种,该模式一般用来描述对象之间的依赖关系。那么首先了解下什么是行为型模式

创建型模式关注对象的创建过程,结构型模式关注对象与类的组织,而行为型模式则关注对象之间的交互。通过研究系统中对象之间的相互作用,明确每一个对象的职责。

下面我们在介绍观察者模式:

1、定义:定义对象之间的一种一对多的依赖关系,当一个对象状态发生改变时,其相关依赖的对象将被通知并自动更新。生活中比如股票的涨跌会影响股民的情绪的变化。

2、模式结构:

(1)Subject(目标类):定义观察者集合。提供接口增加或删除观察者对象,定义通知方法。

(2)ConcreteSubject(具体目标):目标类子类,负责向各个观察者通知。

(3)Observer(观察者类):对所观察的目标的改变做出反应。

(4)ConcreteObserver(具体观察者):实现更新数据的方法。

3、案例分析:(猫、老鼠和狗之间的关系:猫是目标,狗和老鼠是观察者)

(1)抽象目标类 AniSubject

public abstract class AniSubject
{protected ArrayList observers = new ArrayList();//用于存放多个观察者//注册方法public void attach(AniObserver observer){observers.add(observer);}//注销方法public void detach(AniObserver observer){observers.remove(observer);}//抽象通知方法public abstract void action();
}

(2)具体目标类 Cat

public class Cat extends AniSubject
{public void action(){System.out.println("猫叫!!!");for(Object obs:observers){((AniObserver)obs).response();}}
}

(3)抽象观察者类 AniObserver

public interface AniObserver
{public void response();
}

(4)具体观察者类 Mouse

public class Mouse implements AniObserver
{public void response(){System.out.println("老鼠赶紧逃跑!!!");}
}

(5)具体观察者类 Dog

public class Dog implements AniObserver
{public void response(){System.out.println("狗跟着叫!!!");}
}

(6)测试类

public class Client
{pblic static void main(String [] args){AniSubject sub = new Cat();AniObserver obs1,obs2,obs3;obs1 = new Mouse();obs2 = new Dog();sub.attach(obs1);sub.attach(obs2);sub.action();}
}

4、模式优缺点:

(1)优点:将表示层和数据逻辑层分离,在观察目标和观察者之间建立抽象的耦合。

(2)缺点:若观察者过多,通知过程耗时。会有导致系统崩溃的可能性出现。

5、模式应用:

(1)Java语言提供对观察者模式的支持:在 JDK 的 java.util 包中,提供 Observable 类和 Observer 接口。

(2)MVC 架构模式使用了该模式,观察目标就是 Model ,观察者就是 View, Controller 为两者之间的中介。

浅析Java设计模式——观察者模式相关推荐

  1. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  2. Java设计模式-观察者模式(订阅发布模式)

    Java设计模式-观察者模式(订阅发布模式) 一起来看 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持吧!! ...

  3. java设计模式 观察者模式_理解java设计模式之观察者模式

    在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的"观察者模 ...

  4. JAVA 设计模式 观察者模式

    用途 观察者模式 (Observer) 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观 ...

  5. java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解

    Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...

  6. Java设计模式——观察者模式

    转自:http://www.cnblogs.com/shamgod/p/4588557.html 一.概述 childe类中的是关联监听者dad的,若要再增加监听者,会很不方便,且要修改代码.好的方法 ...

  7. java设计模式-观察者模式

    观察者模式介绍: 观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种.在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提 ...

  8. Java设计模式——观察者模式与Spring事件监听器

    写在前面的话:终于通读了一遍<Spring源码深度解析>,在Spring的消息发布(Message)模块使用了设计模式中的观察者模式的经典实现,所以趁此机会总结一些. 1. 业务场景 Sp ...

  9. java设计模式---观察者模式

    观察者模式 Observer 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己. 观察者模式 ...

  10. JAVA设计模式-观察者模式(Observe)

    观察者模式 其实就是一个发布者和订阅者之间的关系 如果订阅者订阅了发布者,那么发布者发布一条消息,订阅者就会立马知道. 中间的关系也就是订阅者需要去订阅消息(也就是,发布者的通知资源池子(也就是存储订 ...

最新文章

  1. mysql性能监控qps,tps,iops
  2. MinGW:sjlj vs dwarf vs seh有什么区别?
  3. Python教程:zip 函数的用法
  4. 一步一步SharePoint 2007之二十五:编写一个最简单的WebPart(3)——添加WebPart
  5. 感受机房管理化繁为简-新款KVM使用心得
  6. js parseInt()与Number()区别
  7. 信息学奥赛C++语言: 数字方阵
  8. Mysql授权用户数据库GRANT ON 数据库名.* TO 用户名@localhost identified BY ‘密码‘,报错ERROR 1064 (42000)
  9. (8)verilog语言编写UART发送
  10. Windows 8 DirectX 开发学习笔记(十五)使用Billboard实现树木贴图
  11. MyBatis 是一款优秀的持久层框架
  12. 无限小说网 内部服务器错误,iOS网络模块优化(失败重发、缓存请求有网发送)...
  13. STC12C5A60S2 红外遥控 LCD显示
  14. AndroidManifest--详细理解
  15. bugku convert [MISC]
  16. SPI与IIC的异同
  17. Python+Opencv实现图像匹配——模板匹配
  18. 单目相机提高标定精度的经验
  19. 使用webgl(three.js)搭建一个3D建筑,3D消防模拟——第三课
  20. Matlab似然函数

热门文章

  1. paypal如何支付欧元_paypal欧元付款的问题
  2. 计算机辅助设计技术领域的应用,计算机辅助设计技术在机械设计中的应用探讨...
  3. 怎么让电脑微信安装到别的盘路径
  4. 软考(20)-Linux部分
  5. Kylo 浏览器 值得一玩
  6. ERP原理:第一节 ERP的总体结构
  7. Jmeter的基本功能使用方法
  8. VUE实现市、区二级联动
  9. 用语音聊天系统源码做语音聊天app开发
  10. Windows便签数据恢复