定义

观察者模式(有时又被称为发布(publish)-订阅(Subscribe)模式,在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统(摘自百度百科)。

关键词:发布-订阅

为什么只有一个关键词?因为我觉得一个关键词足够说明问题了。观察者模式适用于,一个对象改变时,需要通知一个或多个其他对象,而需要通知的对象的特点是:数量不清楚,类型不清楚(仅实现了一个通用接口),具体处理方式不清楚。

举个例子来说明:

小花:你好,我开发过很多erp系统,是一位经验丰富的女司机,现在想找一份java程序员的工作...(成熟稳重型)

猎头:好的,我已经把你加入到我的程序员清单里面了,不要打电话给我,我会通知你的(好莱坞原则)

小明:本人学识渊博、经验丰富,代码风骚、效率恐怖,c/c++、java、php无不精通,熟练掌握各种框架,深山苦练20余年,一天只睡4小时,电话通知出bug后秒登vpn,千里之外定位问题,瞬息之间修复上线。 身体强壮、健步如飞,可连续编程100小时不休息,讨论技术方案5小时不喝水,上至带项目、出方案,下至盗账号、威胁pm,什么都能干......(花式装逼型)

猎头:666,我已经把你加入到我的程序员清单里面了,不要打电话给我,我会通知你的(小明和小花注册为观察者)

小花和小明继续过着自己的日子,因为他们已经在猎头的清单里面了,有工作会收到通知的。

猎头:小花同学,小明同学,这里需要一个资深的全栈工程师,创业型,弹性工作制,股票期权,年终分红...(通知所有观察者

小明:好的(随后凭借着小明的机智,获得了这份工作)

猎头:请把介绍费汇到我的银行卡

又过了一段日子,小花凭借着自己丰富的经验,找到了工作,并没有依靠猎头,所以也就没有什么介绍费

小花:我已经找到工作了,请不要再给我发招聘信息了(移除观察者)

10年之后...

小花娶妻生子,迎娶白富美,出任CEO,走上人生巅峰,孩子已经快要1米高了....(等等,好像有什么地方不对)

小明由于天天加班,1天只睡4个小时,坟头草已经1米高了...

当然这个是后话

以上就是订阅和发布的解释,当然,我可以实话告诉你,这个和我下面要贴的代码并没有什么关系。

一个气象监测应用的需求

概述:建立一个气象观测的应用,从气象站获取数据,并实时更新三个布告板:目前状况,天气统计,天气预报

目前状况:温度,湿度,气压

天气统计:平均温度,最低温度,最高温度

天气预报:明天下雨吗?

以下是具体实现,涉及到的设计原则:

1,针对抽象编程,不针对实现编程

2,多用组合少用继承

3,开闭原则,对扩展开放,对修改关闭(所有设计模式都是围绕这个终极目