(转载请注明:http://zhutty.cnblogs.com, 交流请加群:164858883)

  在软件工程中,有一条重要的原则就是:高内聚低耦合。这是评定软件的设计好坏的一个标准。所谓高内聚,指的是一个模块内各个元素关联紧密,共同完成一个核心业务。低耦合,指的是各个模块之间依赖松散。创建低耦合模块,这一过程也成为解耦。

  观察者模式正是低耦合的软件设计,也称为发布(publish )-订阅(Subscribe)模式。什么是观察者模式?举个栗子:王二小在山上放牛,突然他看见了鬼子到了村外,于是他把山上的烽火台点燃了。村民看见狼烟,都把自家的粮食啥的藏了起来;花姑娘看见狼烟,赶紧换上了庄稼汉的着装;民兵把村口的地雷挂上了弦,扛上枪埋伏在村口;政委组织村民撤退;树上的乌鸦继续敷蛋。这就是生活中的观察者模式,王二小负责点着烽火台后,就没他事了,村里人看见信号后,各自做出了响应。此案例用例图如下:

  从用例图可以看出,每一个参与者相互独立,各自完成独立业务,即使他们都同时响应‘狼烟’,彼此互不影响。

  那么在Web项目中如何应用观察者模式呢?在直播系统中,众多信息依赖于socket实时通信,在传统做法中,socket消息推送回来后,判断消息类型,之后去调用响应的业务处理方法。代码类似如下:  这样的做法负责处理socket消息模板将依赖所有处理socket的A,B。。。其中的switch case将不断堆积。每个业务,比如A弃用了,我们在删除A文件的同时,还要在socket文件进行对应的操作,这样耦合程度就很高了。在业务庞大起来的时候还是会带来一定的维护成本。

  在这个情况下,其实我们可以采用广播机制,广播机制就是观察者模式的一种体现。socket模块在接收到推送的消息时,发送一条广播,将socket消息类型和数据广播出去。每个业务模块监听这个广播消息,然后完成各自的业务处理。sochet模块和业务模块达到了解耦的效果,更易于维护,性能更加稳定。

项目代码:https://github.com/SuunZhu/broadcastMsg 请给颗Star

[原创作品]观察者模式在Web App的应用的更多相关文章

  1. [原创作品] web项目构建(一)

    今天开始,将推出web项目构建教程,与<javascript精髓整理篇>一并更新.敬请关注. 这篇作为这一系列开头,主要讲述web项目的构建技术大全.在众多人看来,web前端开发无非就是写 ...

  2. [原创作品]web网页中的锚点

    因为近来在从事web前端开发的工作,所以写的文章也都是关于web这一块.以后将分享算法和web高级编程的内容,很多公司的web前端不够重视,以为是很low-level,给的待遇也很一般,其实,这都是很 ...

  3. [原创作品] javascript 实现的web分页器原理

    很久没有写博客了,因为最近忙于一些杂七杂八的事情.不过,互联网的价值在于信息共享,因为共享,所以互联网才能飞快发展.博主建了一个技术共享qq群:164858883,因为目前人数还比较少,活跃度还不是很 ...

  4. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  5. [原创作品] RequireJs入门进阶教程

    最近我发现RSS采集数据是个很好玩的东西,就是可以直接把别人的数据放在自己的网站上.如果网友们在其他地方发现这篇文章,还是来博客园看吧(http://zhutty.cnblogs.com).这样代码比 ...

  6. 移动web app开发必备 - Deferred 源码分析

    姊妹篇  移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...

  7. ] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题

    ] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题 标签: myeclipsejavawebWeb App Libraries 2013-10-16 1 ...

  8. 从几篇文字得到关于web app开发的性能问题的答案

    1. http://blogs.adobe.com/creativecloud/are-mobile-web-apps-slow/ 2. http://software.intel.com/zh-cn ...

  9. html5文章 -- 使用 jQuery Mobile 与 HTML5 开发 Web App ——开发原则 | Kayo's Melody

    最近专注研究 jQuery Mobile —— 一款很方便就可以把 Web App 包装成适合 Android 与 iPhone 等触屏移动设备的 Javascript 库,结合 jQuery Mob ...

随机推荐

  1. SpringMVC03controller中定义多个方法

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  2. ASP.NET-FineUI开发实践-4

    最近实在没时间研究东西,FineUI一直也没进一步实践,但是还是很想学点东西,所以找了个课题研究了下,在论坛里看见了又下角的提醒,自己想了想做了一个,我不是大神,接触EXTJS很少,就是用到哪看哪,没 ...

  3. 打jar包的方法

    打jar包的方法是什么? java打jar包,引用其他.jar文件 java项目打jar包 将java源码打成jar包 maven打jar例子 打war包的方法是什么? Eclipse->项目右 ...

  4. activeMQ总结

    队列模式和发布订阅模式的区别 topic只有所有订阅者都消费了,这个消息才会消失.只要有一个订阅者没有消费(持久化模式),这个消息就会存在.订阅者下线然后上线也会读取到这个消息.而且队列的话,消费能力 ...

  5. Examples_08_08

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAARYAAAGsCAIAAACXfh8LAAAgAElEQVR4nO2db3AT193v903e8yIzbV

  6. 1202.2——Xcode部分快捷键

    Ctrl+N(Next)  光标跳到下一行 Ctrl+P(Previous)   光标跳到上一行 Ctrl+B(Back) 光标向左边移动一个字符 Ctrl+F(Forward)   光标向右边移动一 ...

  7. ASP.NET 文本编辑器使用(CKEditor)与上传图片

    CKEditor是什么 CKEidtor是一个在线富文本编辑器,可以将让用户所见即所得的获得编辑在线文本,编辑器或自动将用户编辑的文字格式转换成html代码. 方法一.在ASP.NET工程中添加CKE ...

  8. Js参数RSA加密传输,jsencrypt.js的使用

    注意几点: 1.参数传递的+号处理,在传输时会把+变成空格,不处理后端就报错了. 1.前段代码 <!DOCTYPE html> <html> <head> < ...

  9. 逆波兰表达式 java

    描述  逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3.逆波兰表达式的优点是运算符之间不必有优先级关系, 也不必用括号改变运算次序,例如(2 + 3) ...

  10. redis数据结构HyperLogLog

    如果我们要实现记录网站每天访问的独立IP数量这样的一个功能 集合实现: 使用集合来储存每个访客的 IP ,通过集合性质(集合中的每个元素都各不相同)来得到多个独立 IP ,然后通过调用 SCARD 命 ...