java 设计模式学习笔记(12) - 观察者模式

观察者模式 :

    定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象,这个主题对象在状态发生变化时会通知所有观察者对象,使他们能够自动更新自己。
    根据概念,我们知道这个模式由 多个观察者,一个被观察对象组成。观察者需要将到被观察对象那里去注册自己,或者说被观察对象保存着多个观察者得引用。一旦被观察对象的状态发生了变化,那么它会通知在它这里注册了的所有观察者,而这些观察者一收到消息就会自动进行相应的操作。

    观察者模式核心之处在于观察者和被观察对象都不知道对方的存在,也就是没有使用硬编码的方式将两者组合在一起。

 

   现在使用程序来实现观察者模式加深理解:

 

1. 建立Observer  接口,该接口有个 Updatestate()  函数声明。 当被观察对象状态改变时,这个UpdateState()函数就派上用场 了

 

 

2. 建立被观察对象的抽象类,这个抽象类有  注册,撤销注册,以及发出状态改变消息的方法。

 

 

 

 

3. 建立具体被观察对象类 Server

 

 

4. 建立具体观察者对象:  ServerObserver 类。在这里,ServerObserver 类主要代表 经理 和普通组员。他们要随时关注公司服务器的状态,一旦服务器有问题,他们就要采取相应的行动来保证服务器正常运作。

 

 

 

  从代码中可以看到,观察者也不知道自己需要关注哪个具体的被观察对象。降低了代码的耦合性。

 

5. 建立测试代码, Server 注册了两个观察者 manager 和 staff 。 一旦Server 的状态发生,马上调用Notify() 方法,通知这两个观察者。两个观察者一接到通知,就有不同的动作。

 

 

 

 结果输出:

observer: manager   server state:服务器崩溃   action is :向上级汇报,并赶回公司
observer: staff   server state:服务器崩溃   action is :赶回公司修理

 

 

观察者模式是观察者随着被观察对象变化而变化的?

 

通过代码实现,知道了观察者有一个 updateState 方法,用来实现当被观察对象状态改变时动作响应。

被观察者对象用List 保存了一些观察者。

当被观察者对象状态改变时,它就是调用Notify 方法。Notify 方法会取出List 中所有的Observer 对象,并执行每一个 Obserer 的updateState 方法。也就是说观察者得upateState 方法不是观察者自己调用的,而是被 被观察对象调用的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值