设计模式知识连载(33)---中介者模式:
2017-12-28 14:26
471 查看
<body> <h3>设计模式知识连载(33)---中介者模式:</h3> <p> 通过中介者对象封装一系列对象之间的交互,使对象之间不再相互引用,降低他们之间的耦合。有时中介者对象也可以改变对象之间的交互 </p> <hr> <div> <h3>用户收藏导航模块</h3> <div id = 'collection_nav'> <b>111</b> <b>222</b> <b>333</b> <span>111</span> <span>222</span> <span>333</span> </div> </div> <div> <h3>推荐用户导航</h3> <div id = 'recommend_nav'> <b>111</b> <b>222</b> <b>333</b> <span>111</span> <span>222</span> <span>333</span> </div> </div> <div> <h3>最近常用导航</h3> <div id = 'recently_nav'> <b>111</b> <b>222</b> <b>333</b> <span>111</span> <span>222</span> <span>333</span> </div> </div> <div> <p><input type="checkbox" name="msg" id = 'hide_num'>消息提醒选框</p> <p><input type="checkbox" name="url" id = 'hide_url'>网址选框</p> </div> <script type="text/javascript"> /** * 案例一:导航设置层,方式一:初始 */ // 中介者模式 var Mediator = (function() { // 消息对象 var _msg = {} ; return { /*** * 订阅消息方法 * 参数 type 消息名称 * 参数 action 消息回调函数 ***/ register : function(type, action) { // 如果该消息存在 if(_msg[type]) { // 存入回调函数 _msg[type].push(action) ; // 如果不存在,则建立该消息容器 }else { _msg[type] = [] ; // 存入新消息回调函数 _msg[type].push(action) ; } }, /*** * 发布消息方法 * 参数 type 消息名称 ***/ send : function(type) { // 如果该消息已经被订阅 if(_msg[type]) { // 遍历已存储的消息回调函数 for(var i = 0; i < _msg[type].length; i++) { // 执行该回调函数 _msg[type][i] && _msg[type][i]() ; } } } } })() ; /* 单元测试开始 */ // 订阅demo消息,执行回调函数--输出first Mediator.register('demo', function() { console.log('firsh') ; }) ; // 订阅demo消息,执行回调函数--输出second Mediator.register('demo', function() { console.log('second') ; }) ; // 发布demo消息 Mediator.send('demo') ; /* 单元测试结束 */ // 订阅消息 /*** * 显隐导航小组件 * 参数 mod 模块 * 参数 tag 处理的标签(消息提醒b, 网址span) * 参数 showOrHide 显示还是隐藏 ****/ var showHideNavWidget = function(mod, tag, showOrHide) { // 获取导航模块 var _mod = document.getElementById(mod) ; // 获取下面的标签名为tag的元素 var _tag = _mod.getElementsByTagName(tag) ; // 如果设置为false或者为hide则值为hidden,否则为visible var _showOrHide = (!showOrHide || showOrHide == 'hide') ? 'hidden' : 'visible' ; // 占位隐藏这些标签 for(var i = 0; i < _tag.length; i++) { _tag[i].style.visibility = _showOrHide ; } } // showHideNavWidget('collection_nav', 'b', false) ; // 用户收藏导航模块 // (function() { // ...其他交互逻辑 // 订阅隐藏用户收藏导航消息提醒消息 Mediator.register('hideAllNavNum', function() { showHideNavWidget('collection_nav', 'b', false) ; }) ; // 订阅显示用户收藏导航消息提醒消息 Mediator.register('showAllNavNum', function() { showHideNavWidget('collection_nav', 'b', true) ; }) ; // 订阅隐藏用户收藏导航网址消息 Mediator.register('hideAllNavUrl', function() { showHideNavWidget('collection_nav', 'span', false) ; }) ; // 订阅显示用户收藏导航网址消息 Mediator.register('showAllNavUrl', function() { showHideNavWidget('collection_nav', 'span', true) ; }) ; // })() ; // 推荐用户导航 // (function() { // ...其他交互逻辑 // 订阅隐藏推荐用户导航消息提醒 Mediator.register('hideAllNavNum', function() { showHideNavWidget('recommend_nav', 'b', false) ; }) ; // 订阅显示推荐用户导航消息提醒消息 Mediator.register('showAllNavNum', function() { showHideNavWidget('recommend_nav', 'b', true) ; }) ; // })() ; // 最近常用导航 // (function() { // ...其他交互逻辑 // 订阅显示最近常用导航网址消息 Mediator.register('hideAllNavUrl', function() { showHideNavWidget('recently_nav', 'span', 'hide') ; }) ; // 订阅显示最近常用导航网址消息 Mediator.register('showAllNavUrl', function() { showHideNavWidget('recently_nav', 'span', 'show') ; }) ; // })() ; // 设置层模块 // (function() { // 消息提醒选框 var hideNum = document.getElementById('hide_num') ; // 网址选框 var hideUrl = document.getElementById('hide_url') ; // 消息提醒选框事件 hideNum.onchange = function() { // 如果勾选 if(hideNum.checked) { // 中介者发布隐藏消息提醒功能消息 Mediator.send('hideAllNavNum') ; }else { Mediator.send('showAllNavNum') ; } } // 网址选框事件 hideUrl.onchange = function() { if(hideUrl.checked) { Mediator.send('hideAllNavUrl') ; }else { Mediator.send('showAllNavUrl') ; } } // })() ; </script> </body>
相关文章推荐
- 设计模式知识连载(1)---函数的书写方式
- 设计模式知识连载(2)---封装_1
- 设计模式知识连载(6)---继承_2:创建即继承-构造函数继承
- 设计模式知识连载(15)---抽象工厂模式:
- 设计模式知识连载(39)---数据访问对象模式---本地存储DAO
- 设计模式知识连载(48)---MVC模式:
- 设计模式知识连载(23)---桥接模式:
- 设计模式知识连载(39)---数据访问对象模式---MongoDB
- 设计模式知识连载(9)---继承_5:如虎添翼-寄生式继承
- 设计模式知识连载(12)---调用方式:多态
- 设计模式知识连载(19)---外观模式:
- 设计模式知识连载(22)---装饰者模式:
- 设计模式知识连载(49)---MVP模式:
- 设计模式知识连载(26)---模板方法模式:
- 设计模式知识连载(41)---简单模板模式:
- 设计模式知识连载(44)---等待者模式:
- 设计模式知识连载(50)---MVVM模式:
- 设计模式知识连载(10)---继承_6:终极继承者-寄生组合式继承
- 设计模式知识连载(14)---工厂方法模式:
- 设计模式知识连载(16)---建造者模式: