观察者模式的定义
在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象就会收到通知并自动更新。
其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅了就收不到信息。
观察者模式结构图
该模式包含四个角色
抽象主题
该角色是一个抽象类或者接口,定义了增加、删除、通知观察者对象的方法
具体主题
该角色实现抽象主题,定义了一个集合存入注册过的具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知
抽象观察者角色
定义一个接口,在得到主题通知时更新自己
具体观察者角色
该角色是具体的观察者对象,在得到具体主题更改通知 时更新自身的状态
简单的代码逻辑
有一个非常经典的Oberver设计模式实例 在本例中,事情发生的顺序应该是这样的:警报器和显示器告诉热水器,它对它的温度比较感兴趣(注册)。热水器知道后保留对警报器和显示器的引用。热水器进行烧水这一动作,当水温超过95度时,通过对警报器和显示器的引用,自动调用警报器的MakeAlert()方法、显示器的ShowMsg()方法。
比如说,如果我们不光想获得热水器的温度,还想在Observer端(警报器或者显示器)方法中获得它的生产日期、型号、价格,那么委托和方法的声明都会变得很麻烦,而如果我们将热水器的引用传给警报器的方法,就可以在方法中直接访问热水器了。
领取专属 10元无门槛券
私享最新 技术干货