[原创作品]观察者模式在Web App的应用
(转载请注明: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的应用的更多相关文章
- [原创作品] web项目构建(一)
今天开始,将推出web项目构建教程,与<javascript精髓整理篇>一并更新.敬请关注. 这篇作为这一系列开头,主要讲述web项目的构建技术大全.在众多人看来,web前端开发无非就是写 ...
- [原创作品]web网页中的锚点
因为近来在从事web前端开发的工作,所以写的文章也都是关于web这一块.以后将分享算法和web高级编程的内容,很多公司的web前端不够重视,以为是很low-level,给的待遇也很一般,其实,这都是很 ...
- [原创作品] javascript 实现的web分页器原理
很久没有写博客了,因为最近忙于一些杂七杂八的事情.不过,互联网的价值在于信息共享,因为共享,所以互联网才能飞快发展.博主建了一个技术共享qq群:164858883,因为目前人数还比较少,活跃度还不是很 ...
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
- [原创作品] RequireJs入门进阶教程
最近我发现RSS采集数据是个很好玩的东西,就是可以直接把别人的数据放在自己的网站上.如果网友们在其他地方发现这篇文章,还是来博客园看吧(http://zhutty.cnblogs.com).这样代码比 ...
- 移动web app开发必备 - Deferred 源码分析
姊妹篇 移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...
- ] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题
] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题 标签: myeclipsejavawebWeb App Libraries 2013-10-16 1 ...
- 从几篇文字得到关于web app开发的性能问题的答案
1. http://blogs.adobe.com/creativecloud/are-mobile-web-apps-slow/ 2. http://software.intel.com/zh-cn ...
- html5文章 -- 使用 jQuery Mobile 与 HTML5 开发 Web App ——开发原则 | Kayo's Melody
最近专注研究 jQuery Mobile —— 一款很方便就可以把 Web App 包装成适合 Android 与 iPhone 等触屏移动设备的 Javascript 库,结合 jQuery Mob ...
随机推荐
- 面试题 HashMap 数据结构 实现原理
数据结构 HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组:数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O ...
- (转)jquery的html,text,val
.html()用为读取和修改元素的HTML标签 .text()用来读取或修改元素的纯文本内容 .val()用来读取或修改表单元素的value值. 这三个方法功能上的对比 .html(),.text() ...
- java静态代码块 类加载顺序问题。
class B extends Object { static {System.out.println("Load B");} public B(){System.out.prin ...
- IP V4地址分类
IP V4地址 共分为五类: A类地址范围:1.0.0.1---126.255.255.254 B类地址范围:128.0.0.1---191.255.255.254 C类地址范围:192.0.0.1- ...
- 学习OpenSeadragon之一(一个显示多层图片的开源JS库)
OpenSeadragon是一个可以显示多层图片(可放大缩小)的Web库,基于JavaScript,支持桌面和手机. 由于我项目需要,却没有找到任何中文教程,因此在官网上一边学习,一边总结于此. 官网 ...
- oracle双机热备概念
1. 双机热备概述 双机热备有两种实现模式,一种是基于共享的存储设备的方式,另一种是没有共享的存储设备的方式,一般称为纯软件方式. 基于存储共享的双机热备是双机热备的最标准方案. ...
- canvas 绘制矩形
XXX(x,y,width,height) x矩形左上角x坐标 y矩形左上角y坐标 ...
- C# 中显示实现接口
接口的实现分为显示实现和隐式实现 用显示实现接口的目的就是为了,当一个类中实现多个具有相同方法的接口时,能够区分开来 在调用的时候,必须用接口调用. class Program { static vo ...
- JSP九大隐式对象
JSP九大隐式对象 request HttpServletRequest response HttpServletResponse session HttpSession application Se ...
- Serializable序列化
对象的输入输出流 package file; import java.io.File; import java.io.FileInputStream; import java.io.FileOutpu ...