Observer 观察者模式

Observer 观察者模式

目录

[TOC]

1. 概述

1.1. Head First设计模式定义

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象状态改变时,它的所有依赖者都会收到通知并自动更新。

典型的问题比如报社,只要你是他们的订户,他们每次有新报纸出版时,就会向你这送来,当你不想要看报纸时,取消订阅,他们就不会再给你送报纸。

1.2. 自我理解

1、观察者模式是一种发布订阅模式,发布者发布消息,订阅者收取消息,订阅者没有订阅该发布者就收不到消息;
2、观察者模式有两种模式,一种推,一种拉。推是直接传递消息给订阅者,订阅者直接使用。拉是把消息放在发布接口中,订阅者自己去取;
3、JDK中自带了 java.util.Observer 和 java.util.Observable。
应用场景:
jsp常用的各种事件,onclick、onmouse、onselect、onchange 就是利用了观察者模式思想。包括java的swing

1.3. 观察者模式组成结构

抽象主题 (Subject):抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。
具体主题 (ConcreteSubject):该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。
抽象观察者 (Observer):是观察者的抽象类,它定义了一个更新接口,使得在得到主题更改通知时更新自己。
具体观察者 (ConcrereObserver):实现抽象观察者定义的更新接口,以便在得到主题更改通知时更新自身的状态。

2. UML

3. Example

3.1. 自定义观察者模式

3.2. JDK自带的观察者模式

原创文章,转载请注明: 转载自LoserZhao – 诗和远方[ http://www.loserzhao.com/ ]

本文链接地址: http://www.loserzhao.com/java/designpattern/observer-designpattern.html

文章的脚注信息由WordPress的wp-posturl插件自动生成

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

使用新浪微博登陆