观察者模式:发布-订阅模式、模型视图模式、源--监听器模式、从属者模式。
观察者模式定义对象间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
优点: 1、观察者和被观察者是抽象耦合的
2、建立一套触发机制
3、观察者模式满足“开闭原则”
缺点:1、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅是知道观察目标发生了变化
2、在观察者和被观察者之间产生循环依赖的话,可能会导致系统崩溃
使用场景:当一个对象的数据更新时需要通知其它对象,但这个对象又不希望和被通知的那些对象形成紧耦合
一个对象数据更新时,它需要让其他对象都需要更新自己的数据,但却又不知有多少对象需要更新数据
观察者模式的两种数据方式:推数据、拉数据
推数据方式是指具体主题变化后的数据全部交给具体观察者,即将变化后的数据传递给具体观察者的用于更新数据的方法的参数。
拉数据方式是指具体主题将变化后的数据交给具体观察者,而是提供了获得这些数据的方法,具体观察者得到通知后,可以调用具体主题提供的方法得到数据。但需要自己判断数据是否已经更新。
相关例子:1、求职中心与求职者。求职者关心求职中心的信息,求职中心能及时将最新的职业需求信息告知求职者。
2、书店定期发布图书信息。有两位顾客对此很感兴趣,但是一位关心图书名称和价格,一位关心作者和出版社。