首页 > 代码库 > 观察者模式

观察者模式

观察者模式

这是一个我们最经常接触到的设计模式,也称为订阅者模式

 

它不仅仅常常出现我们的项目,也常常出现在我们生活中

 

生活中像是订报纸、订牛奶、订阅到货通知等等

 

项目中则是MVC的Model->View,即是数据变化通知视图变化

 

那么我们可以看得出来,此模式的特点:

  1. 主题与订阅者的关系组成(通常简单应用中是一个主题对应多个订阅者,但实际上通常是多个主题对应多个订阅者的多对多关系)
  2. 订阅者可以动态订阅和取消订阅(我想订牛奶了和我不想订牛奶了可以随时改变)

所以说需要使用观察者模式的情况,通常是需要对某一对象的状态进行监测,发生变化的情况下通知对此对象关注的其他对象

 

订阅者和被订阅者的关系是在运行时动态发生变化的,也就是说这个模式是行为类型的模式(运行中改变行为)

 

我们可以从设计原则的角度来看一下,我们将在Subject中的notifyObservers方法中调用Observer的接口:update,而并不清楚Observer的具体部分

 

我们可以试着想象,这体现的是高内聚低耦合中的低耦合,则降低耦合度,彼此之间所知胜少。

 

说到这,可能有人要跳出来说,那为什么Observer中会持有Subject对象了,实际上这不是必要的,但也没关系,操作中我们经常会只开放少许的访问接口,也就是说,通过这个实例变量,我们也没有太多的操作权限。

 

技术分享


订阅者的设计模式并不难理解,就不附上代码了。

 

可以这么来看

 

1、主要关系是2个:订阅者和被订阅者

2、注册订阅和解除订阅的方法

3、状态变化后统一的通知方法(接口)

 

实际运用中会出现在注册后通知、购物付款后通知、到货通知等等。

观察者模式