本篇文章主要介绍了" 2Observer Pattern(观察者模式)",主要涉及到方面的内容,对于软件工程感兴趣的同学可以参考一下:
Observer Pattern(观察者模式)定义: 在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。 干说...
Observer Pattern(观察者模式)定义:
在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
干说定义肯定没有举例理解的透彻。想到Observer Pattern(观察者模式)就来举个生活中的例子来帮助我们更好消化和理解其具体含义。
举例:
订阅杂志或者报纸,这里面有两个主角,一个是报纸杂志的供应商(报社),一个是报纸杂志的订阅者。这里就是被观察者也叫主题(供应商)和观察者(订阅者)。主题(Subject)应该有观察者名单,当主题有新的报纸售出时将按主体持有的观察者名单一个一个发送新报纸(发送没有先后顺序,一切按存储顺序发送)。
同时主题还应该有三个方法:
一、将观察者写入名单中(registerObserver())
二、将观察者从名单中删除(removeObserver())
三、当有新消息发送及时通知名单中所有观察者(notifyObservers())


1publicinterface Subject {//主题接口,所有报社都要实现该接口 2 3/*没有存储订阅者的列表,是因为我们不想在接口中写死存储方式,
4 让编程人员自己在实现接口的时候写入想要的存储方式(如:链表,数组,栈,队列等)
5 这样更合理。*/ 6 7publicvoid registerObserver(Observer o);//将订阅者登记在列表中 8publicvoid removeObserver(Observer o);//将订阅者从列表中移除 9publicvoid notifyObservers(Object arg);//有参通知方法,有新的消息即使通知列表中所有订阅者10publicvoid notifyObservers();//无参通知方法11 }
Subject 观察者所具有的东西就会少一些:
首先,内部需要有存储主题的对象,这样知道观察者所订阅的报社是哪一家,具有主题对象还有一个重要的原因,把登记、删除、通知观察者的功能全部委托给主题去做。
其次,还需要有更新自己消息的方法(update())新的消息发送过来,观察者也要及时更新自己内部消息,将旧的消息替换成新的消息。