听飞狐聊JavaScript设计模式系列11
本回内容介绍
上一回,聊了适配器模式,图片预加载,介一回,聊桥接模式(Bridge),跟之前一样,难度比较小,桥接模式将抽象部分与它的实现部分分离,通过桥接模式联系彼此,同时又使之都可以独立地变化。也算是一种解耦。
1.桥接模式
这里需要用到之前写过的代码,不清楚的童鞋看看前面聊过的系列08的门面模式之DOM2事件,这里会用到EventUtil,如下:
<input type="button" id='btn' value="摁一下证明被触发">
// 获取dom,没什么好说的
var d = document;
var $ = function(id){return d.getElementById(id);
}
window.onload=function(){// 获取buttonvar btn = $('btn')// 之前聊门面模式的时候写的util,不清楚的童鞋再看看系列08EventUtil.addHandler(btn,'click',bridge);// 这里就是桥接了function bridge(){// 这个this是获取的按钮本身var _self = this;// 触发函数,并把按钮传参过去fire(_self);}// 这里简单的写个弹窗,没有写太复杂的逻辑处理function fire(o){alert(o.value); // 摁一下证明被触发}
}
这里的bridge就是用于连接抽象事件和fire业务逻辑部分的桥梁,这个例子没有写过多的代码,简简单单比较直观好理解。then,下一个例子。
2. 桥接模式之组织多个类
这个比上一个事件模拟的例子更简单,把其类封装起来,通过一个桥梁函数来组织。
// 类ONE,简写O
var ClassO = function(a, b, c) {this.a = a;this.b = b;this.c = c;
}// 类TWO,简写T
var ClassT = function(x,y,z) {this.x = x;this.y = y;this.z = z;
};// 桥梁类,组织上面的两个类
var Bridge = function(a,b,c,x,y,z) {this.one = new ClassO(a,b,c);this.two = new ClassT(x,y,z);
}
这个例子特简单吧,可能在平时开发中经常用到,只是不知道这种开发模式就叫做桥接模式。then,下一个例子。
3. 桥接模式之特权函数
特权函数,用一些具有特权的方法作为桥梁以便访问私有空间,可以回忆一下之前的系列02。
// Open类
var Open = function(){// 私有业务方法,用一个简单的弹框模拟var privateM = function(){alert("飞狐就是帅!");}// 这里就是一个桥梁,提供私有方法privateM的访问权this.bridge = function(){return privateM();}
}// 这里测试一下,没什么好说的
var o = new Open();
o.bridge(); // 飞狐就是帅!
这个也不难吧,一个私有函数访问特权,全当是复习了。
装个逼先。最近的电影《我的少女时代》还不错耶~!啥没记住,就一句台词特印象:“报告主任,我考第一是作弊!”。嘿嘿~~
这一回聊的桥接模式,主要是理解,并没有太多复杂的地方。
下面的内容,就练一道题吧。
连续自然数分组,计算最多组的个数
将1至100这100个连续自然数分成N组,使每组相加的值相等。返回N组中个数最多一组的个数:
function calculate(x){// 项数,更灵活的话,可以当参数传入,当然逻辑会更复杂点var n = 100;// 前n个数的和var s = 0;// 向下取整,var group = Math.floor(n/2);// 计算总和,没记错的话,公式是=(首项+末项)*项数/2var sum = (1 + n) * n/2;// 计算平均数,防止有余数,向下取整var avg = Math.floor(sum/x);// 循环所有项for (var i=1;i<=n;i++) {// 累加每一项s += i;// 判断当大于平均数时停止if (s > avg) {console.log(x+"个数组中数字最多的一组有:" + (i - 1) + " 个,此时的和为:" + (s - i) + "。");break;}}
}
calculate(8); // 8个数组中数字最多的一组有:35 个,此时的和为:630。
这是在网上看到的一道题,改写的一个计算方法,注释写的还算清楚吧,更灵活的话,还可以扩展传入项,有兴趣的童鞋可以玩玩儿,当娱乐消遣呗。
这一回,主要聊了桥接模式,回忆了下事件监听,聊了用桥接模式组织多个类,聊了特权函数,做了一道计算题,这回主要在于理解~~
下一回,可能会略抽象一点,聊一聊组合模式。
客观看完点个赞,推荐推荐呗,嘿嘿~~
注:此系飞狐原创,转载请注明出处
听飞狐聊JavaScript设计模式系列11相关推荐
- 听飞狐聊JavaScript设计模式系列05
本回内容介绍 上一回聊到JS的类的模拟,继承,分析了nodejs,extjs,jquery,underscore的继承源码. 介一回,偶们来聊一下在JS中模拟接口,掺元类,装饰者模式,有些盆友可能用过 ...
- 听飞狐聊JavaScript设计模式系列07
本回内容介绍 上一回聊到JS单例模式(singleton),做了一道题,内容不多,比较容易理解. 介一回嘞,聊聊工厂模式,之前聊到过工厂模式,这回聊深入点儿,可能会比较抽象,不过好在实际开发中使用还算 ...
- 听飞狐聊JavaScript设计模式系列13
本回内容介绍 上一回聊了聊组合模式(Composite),用组合模式模拟了个图片库,聊了递归. 介一回聊状态模式(State),官方描述允许一个对象在其内部状态改变时改变它的行为.略抽象,不过看了代码 ...
- javascript设计模式系列 - LukeLin - 博客园
javascript设计模式系列 创建型: 1.抽象工厂模式(Abstract Factory) 2.构建者模式(Builder) 3.工厂方法模式(Factory Method) 4.原型模式(Pr ...
- JavaScript设计模式系列—模式篇总结(上)
转载请注明预见才能遇见的博客:http://my.csdn.net/ 原文地址:https://blog.csdn.net/pcaxb/article/details/102517956 JavaSc ...
- JavaScript设计模式系列四之外观模式(附案例源码)
文章初衷 设计模式其实旨在解决语言本身存在的缺陷, 目前javaScript一些新的语法特性已经集成了一些设计模式的实现, 大家在写代码的时候,没必要为了用设计模式而去用设计模式, 那么我这边为什么还 ...
- 《JavaScript设计模式》——11.2 一切只因跨域
本节书摘来自异步社区<JavaScript设计模式>一书中的第11章,第11.2节,作者:张容铭著,更多章节内容可以访问云栖社区"异步社区"公众号查看 11.2 一切只 ...
- 《JavaScript设计模式》——11.3 站长统计
本节书摘来自异步社区<JavaScript设计模式>一书中的第11章,第11.3节,作者:张容铭著,更多章节内容可以访问云栖社区"异步社区"公众号查看 11.3 站长统 ...
- javascript设计模式系列
创建型: 1.抽象工厂模式(Abstract Factory) 2.构建者模式(Builder) 3.工厂方法模式(Factory Method) 4.原型模式(Prototype) 5.单例模式(S ...
最新文章
- Linux命令学习,学习这20条Linux命令,玩转你的树莓派!
- 使用网络存储SAN和NAS
- ******中最常用的网络命令
- Build 2019:微软正式宣布 .NET 5
- BeanUtil使用例子:解析并转化HttpServletRequest到Bean的全面测试
- 漫步最优化七——介绍
- 【报告分享】2020中国直播电商趋势洞察与运营指导报告.pdf(附下载链接)
- hmcl手机版_hmcl启动器app下载
- Linux系统下在windows虚拟机中使用数位板的问题及解决办法
- 在线编辑Word——插入公式
- 怎么把PDF转换成jpg图片?这两种方法快来get
- 高德地图驾车导航内存优化原理与实战
- r语言做断轴_手把手教你用R语言做回归后的残差分析
- 基于蜜蜂优化算法优化的卷积神经网络(CNN)图像分类——附代码
- java使用微信表情代码_iOS高仿微信表情输入功能代码分享
- UPP映象(A C++ GUI lib)
- n枚硬币中找到问题硬币
- 发那科机器人override指令_【发那科】机器人控制指令介绍(二)
- 计算机关于职业与道德的论文怎么写,计算机职业道德论文.doc
- Bzoj1057 [ZJOI2007]棋盘制作