00:01
我们用。第一种普通方案来实现一下天气预报的这么一个项目,那么这一块呢,我们使用哪种方式呢?咱们就使用这种方式就是。用这个weather data推送的方式来完成。OK,好,那现在我们来分析一下,这里面呢,呃,其实核心就这么两个类,一个是wide data,一个是current condition,我们这样理解啊,同学们,我们把这个current condition呢理解成是一个网站,比如是我们气象局自己的网站,好吧,这样大家理解起来会比较容易一点,就说这边是我们。天气预报,天气的数据,而这边是我们的一个网站,谁的自己的网站。好在这样一个情况下呢,我们这个代码就我这已经差不多写出来了,因为这里面代码呢,呃比较简单,还是不涉及到设计模式,所以说我这块呢,就直接把代码给他拿,拿过来跑一下。
01:00
然后再写这个观察者模式来改进的时候,我们再给他手敲一遍,因为这个地方应该大部分同学只要学过Java的都能看懂,来吧,现在呢,我们打开这个eclipse,我们来编写一下这个呃,代码,首先我们新建一个包包。这个标包呢,我们就叫做什么呀,点OB server。观察者模式。那观察者模式呢,刚才我们已经讲过了,首先呢,我有一个current conditions,这个呢理解成是一个网站,所以说我把这个代码拿过来用一下,好吧,也不难。也不难。我们新建一个类。新建一个类叫current。什么呀,Condition?Conditions当前的一个情况,OK?那么这个类呢,我们直接把它覆盖了。好,同学们来看一下这个大体是个什么概念,聊聊。好,我这儿做一点点小小的说明,这是什么呢,显示。
02:02
显示当前。天气情况。天气情况你可以理解成啊,可以这样子,可以理解成是什么呢?气象站,气象站自己的自己的网站。因为你自己的网站要要展示嘛,所以所以既然你你要去展示,肯定会有三个属性,这边呢,分别是我的温度。温度,还有气压。是不是有气压,还有什么湿度?诗。湿度。好,这三个信息,那同学们可以看到,这边就是我们显示的,比如今天的天气是,呃,温度是什么,气压是多少,湿度是多少hum。那这边呢,显示这个是用于显示的。OK,那显示写错了,而上面这个呢,是用来更新的,这个是这个更新是让别人来调的,因为我希望是,呃,就是。
03:06
是别人推送给我们,这个update是用来更新的。谁来调呢,更新。更新这个天气情况。天气。天气情况。是由谁呢?是由是由我们这个weather weather data来调用的。调用,因此现在我们因此我从这里可以分析出来,我使用的是什么模式,模式呢,使用是推送模式。也就是说当whether data的信息,当whether data的这个嗯,数据有变化的时候呢,他就掉我们的update,他一调update看到没有,我就更新了,就是它,嗯,这个update时代掉的是weather来调的,它一定要就会把最新的这三个,比如说温度temperature player,还有humity。给我给我完了之后,我更新到我自己的三个属性,然后display就一更新,马上就显示,大家能看懂了吗。
04:08
不难吧,好,这个就写完了,写完过后呢,我们再来看这一个weather data。Weather data都不难号,同学们,因为现在我还没有写模式,我们用的是比较传统的方式,还是比较好理解的,来看一下,那现在这个地方我们就写个weather data。好的,这也是一个类,这是一个核心类。好,我把这个粘贴到格式化一下,我们来看看这个类是干什么的,我仍然做一些相应的说明,这个类呢是核心的核心类。它的作用是第一个它能够的,它这里面包含了包含最新的最新的天气情况。信息哦,当然主要就是三个嘛,第二一个呢,同学们可以看到它包含了一个current condition对象,为什么。
05:02
呃,就是我们现在说推送,我既然要推送给你,我肯定要维护它含有。OK,它包含含有吧,还有一个这样的对象,Current的对象。这个大家可以看得出来,第三点,第三点当当数据有更新时。有更新。更新时就主动的OK,主动的调用,调用谁啊current condition这个对象的什么方法呢?刚才已经说了update方法。Update,他一旦调这个方法,是不是就相当于说把最新的信息推送给他了。那么current condition update update方法里面,它是不是这个方法里面含有一个display display的一个动作,或者display的一个操作?这样呢,我们的,呃,第三方或者是自己的网站就可以看到什么呀,最新消息,这样这样他们。
06:02
接入方啊,这个叫接入方。接入接入方就干什么呢?就看到了,看到了最新的什么呀,信息就这样子,所以说这样一分析大家应该很清晰了,你看这个就是它包含的或者说聚合的一个current condition。那这个这个当然就不说了,他在创建Y的时候就把它放进来了,然后这边是一堆get信息,不管它了,大家看带的陷阱,那么这个方法。这个site带的是什么意思呢?就是当。当数据有更新时。有更新时。更新时就调用。就调用什么呢,就调用这个set data,而这个set data里面呢,大家有没有看到他先把自己的。属性先更新,然后调用了data change,而这个data change大家有没有发现它掉的就是我们。
07:00
聚合的这个current condition的update方法,而这个update方法里面大家注意一下是不是又有display,这样子是不是就让我们的接入方就看到最新的消息了。最新的信息能理解了吗?这个流程也不算很难,对不对?所以这个就是当数据有更新的,调用set get,然后它更新过后呢,在调用我们的data change。这个data change的作用是干什么呢?推送给。将将最新的信息,最新的这个信息推送。这样写,推。推送给什么呢?推送给这个接入方。接入方,当然这个接入方现在只有一个,就是current condition。好,当然他怎么去催促的是吧,这这方是通过调用。怎么推,怎么推给他调用接入方的,接入方的哪个方法呀,Update的方法。
08:03
好,同学们,代码应该说还是比较简单。对吧,我们再说一下,这这个是温度啊,Temperature,气压prayer。呃,Humidity,这个是湿度。好,现在呢,有了这两个东西过后,是不是同学们我们就可以来测试一把了,那现在呢,我写一段代码来测试。写一个什么呢,Client端。没问题吧,看多。那这个client我们怎么玩呢?显然我要写一个主方法。对,我要写一个主方法。在这个主方法里边,我们来看一下我是怎么使用的,非常的简单,我就偷个懒哈,把这个拿过来看一下。我是怎么实现呢?首先我们创建一个接入方。创建接入方。介入。接入方,这个接入方呢,就是current condition对象好,然后。
09:00
我把这个接入方,呃,放到放到这个weather data里面去。就是创建什么呢?Y data对象并并干什么呀。并并将这个接入方。这个东西干什么呀,聚合到或者是呃,或者说传递到都可以是吧,传递。传递到哪里去呢?传递到德中。这个大家能看懂吧,好,然后这个地方我就去设置最新信息,如果你不设置的话,它不全部都都为零吗?好,然后我们更新数据。更新消息啊,更新天气情况。那么根据同学们刚才说的,他一定要set data,大家看他一定要set data呢,他就会去更新自己的最新信息,然后data change data change就是将最新的消息推送给接入方,接入方里面调update,显示自己。是这样的吧,同学们好,现在呢,我们来运行一下,应该可以看到最新的情况,走运行一下我们可以看到。
10:06
今天的天气是30,呃,30度,然后气压150,然后湿度40。那如果说同学们,假如根据我们实际情况,现在呢,天气情况变了。天气情况变化有没有这种可能性,可能比如说现在现在的天气情况变成这个样子了,我们测试到最新的天气呢,变成了比如说40度。气压变成了16160,而适度变成了20,那么这样一调,是不是就相当于说又去通知我们各个接入方,让他们去更新自己的天气情况,所以这样呢,我们可以想天气发生变化,输出一句话。OK。那这里面我输入天气情况发生了变化。来运行时,我们可以看到天气情况一旦发生变化呢,我们发现最新的情况也拿到了,这是我们这个接入方看到的。
11:03
好,同学们,那这个呢,就是我们用传统方案来解决的,来分析一下这个传统方案有什么问题。我们来分析一下这个方案有什么问题。那这里我总结几句话,大家观察一下。其他第三方接入气象站的这个数据问题是比较严重的。而且没有办法动态的添加第三方,大家有没有发现,当在y data中,当增加一个第三方的时候,都需要创建一个对应的第三方的公告板,就是那个信息,然后加对象,加入到data change,不利于维护,也就是说。哪个地方会变化呢?比如说我们要增加一个,呃,第三方,比如说是新浪网站来了。比如说是新浪网站,他要接入。那如果新的网站要接入的话,大家想一想,是不是就意味着首先。我要去创建一个新浪,这是肯定的,呃,类似于写这么一个玩意儿。
12:03
啊,只是把这个名字改成新浪了,然后干什么呢?同学们,是不是意味着我在这个地方要加入。新的第三方。新的第三方,OK,同时哪个地方要变,是不是这样,这地方也要变化,哎,这个地方也要变化,还有哪个地方要变化,是不是你的这一个。Data change也也要也要加一个新的第三方,麻烦麻烦,至少你要,至少你要去修改Y的吧。那它不符合我们的什么原则,开辟原则。所以说从这地方可以看出来呢,他会他会去修改我们这个y data,那么这样不利于维护,也不是动态加入的,你还得把这个程序停下来,是不是很麻烦,所以说从这地方呢,他违反了对吧,他违反。看他。违反了什么呢?OCP原则。
13:01
好,所以说通过这样一个分析,我们发现呢,用传统方法是有问题的,或者是不好的,我们决定用什么方式呢?我们引出了我们要讲的观察者模式。好,那观察者模式怎么去改进呢?我们下一课给大家讲观察者模式的解决方案。
我来说两句