美文网首页
顶层设计-观察者模式

顶层设计-观察者模式

作者: 我性本傲 | 来源:发表于2019-05-09 16:20 被阅读0次

1. 定义

观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新

2.观察者模式简单实现

观察者模式这种发布-订阅的形式我们可以拿微信公众号来举例,假设微信用户就是观察者,微信公众号是被观察者,有多个的微信用户关注了程序猿这个公众号,当这个公众号更新时就会通知这些订阅的微信用户。

3.主要解决:

一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

4.使用观察者模式的场景和优缺点

使用场景

当一个对象的改变需要同时改变其它对象,并且它不知道具体有多少对象需要改变的时候,就应该考虑使用观察者模式。

总的来说,观察者模式所做的工作就是在解耦,让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响到另一边的变化。

优点

支持简单的广播通信,自动通知所有已经订阅过的对象。

页面载入后目标对象很容易与观察者存在一种动态关联,增加了灵活性。

目标对象与观察者之间的抽象耦合关系能够单独扩展以及重用。

缺点

如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。

如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。 

观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。

5.注意事项: 

避免循环引用。

如果顺序执行,某一观察者错误会导致系统卡壳,一般采用异步方式。

6.vue中的应用

Vue通过设定对象属性的 setter/getter 方法来监听数据的变化,通过getter进行依赖收集,而每个setter方法就是一个观察者,在数据变更的时候通知订阅者更新视图。

那么我们的订阅发布到底是什么呢?

其实就是字面意思 你订阅了我的信息 等我更新了 我就给你一个反馈

Vue.$on("someFun",(data)=>{ ...coding})

Vue.$emmit("someFun",this.data)

小结: 发布订阅模式就是 把观察者放在一个Array中 然后在被观察者发生改变时通知所有的观察者,使用回调函数的方式通知。

相关文章

  • 顶层设计-观察者模式

    1. 定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义...

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • Guava源码分析——EventBus

    EventBus的设计理念是基于观察者模式的,可以参考设计模式(1)—观察者模式先来了解该设计模式。 1、程序示例...

  • Android LifeCycle 源码学习总结

    整体设计 Lifecycle的核心设计模式就是观察者模式。 LifeCycleOwner 是被观察者,Lifecy...

  • PHP设计模式之观察者模式

    PHP设计模式之观察者模式

  • 设计模式 - 观察者模式

    观察者模式的定义 观察者模式简述 MVC是由各种复杂的设计模式组合而成的复合结构,观察者是其中的设计模式之一。视图...

网友评论

      本文标题:顶层设计-观察者模式

      本文链接:https://www.haomeiwen.com/subject/hbewoqtx.html