java 设计模式 观察者_java设计模式–观察者模式(Observer)

java设计模式–观察者模式(Observer)观察者模式的定义:定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。认识观察者模式:1、目标和观察者之间的关系:按照模式的定义,目标和观察者之间是典型的一对多的关系。但是要注意,如果观察者只有一个,也是可以的,这样就变相的实现了目标和观察者之间一对一的关系。2、观察者模式中有四种对象:Subjec...
摘要由CSDN通过智能技术生成

java设计模式–观察者模式(Observer)

观察者模式的定义:

定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象

都得到通知并被自动更新。

认识观察者模式:

1、目标和观察者之间的关系:

按照模式的定义,目标和观察者之间是典型的一对多的关系。

但是要注意,如果观察者只有一个,也是可以的,这样就变相的实现了目标和观察者之间

一对一的关系。

2、观察者模式中有四种对象:

Subject(目标对象),

Observer(定义观察者接口),

ConcreteSubject(具体的目标实现对象),

ConcreteObserver(观察者的具体实现对象)

一个目标可以有任意多个观察者对象,一旦目标的状态发生了改变,所有注册的观察者都会等到通知,

然后各个观察者会对通知作出相应的响应,执行相应的业务功能处理,并使自己的状态和目标的状态保存一致。

Subject:目标对象接口,提供如下功能:

a.一个目标可以被多个观察者观察

b.目标提供对观察者注册和退订的维护

c.当目标的状态发生变化时,目标负责通知所有注册的,有效的观察者

Observer:观察者的接口,提供目标通知时对应的更新方法,这个方法进行相应的业务处理,可以在这个方法

里面回调目标对象,以获取目标对象的数据。

ConcreteSubject:具体的目标实现对象,用来维护目标状态,当目标对象的状态发生改变时,通知

所有注册的、有效的观察者,让观察者执行相应的处理。

ConcreteObserver:观察者的具体实现对象,用来接收目标的通知,并进行相应的后续处理,比如更新

自身的状态以保持和目标的相应状态一致。

举例:

69a1c5dcf1d7bb73fb7a67a636f351ac.png

import java.util.ArrayList;

import java.util.List;

/**

* 功能:

* 目标对象,作为被观察者,它知道观察它的观察者,并提供注册和删除观察者的接口

* @author Administrator

*

*/

public class Subject

{

//用来保存注册的观察者对象,也就是报纸的订阅者

private List readers = new ArrayList();

/**

* 功能:

* 注册观察者对象(报纸的读者需要向报社订阅,先要注册)

* @param observer 观察者对象

*/

public void attach(Observer reader)

{

readers.add(reader);

}

/**

* 功能:

* 删除观察者对象(报纸的读者可以取消订阅)

* @param observer

*/

public void detach(Observer reader)

{

readers.remove(reader);

}

/**

* 功能:

* 通知所有的观察者

* (当有报纸出版后,就要主动的送到读者手中,相当于通知读者)

*/

protected void notifyAllObservers()

{

for(Observer reader : readers)

{

reader.update(this);

}

}

}

1e7c5ee900d949c9b7b942416f6c9074.png

6fa2ee4d3b142ee66a801831bde73aab.png

/**

* 功能:

* 具体的目标对象,负责把有关状态存入到相应的观察者对象

* 并在自己状态发生改变时,通知各个观察者

* (报纸对象)

* @author Administrator

*

*/

public class NewPaper extends Subject

{

//报纸的具体内容

private String content;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值