本回内容介绍

上一回,聊了适配器模式,图片预加载,介一回,聊桥接模式(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相关推荐

  1. 听飞狐聊JavaScript设计模式系列05

    本回内容介绍 上一回聊到JS的类的模拟,继承,分析了nodejs,extjs,jquery,underscore的继承源码. 介一回,偶们来聊一下在JS中模拟接口,掺元类,装饰者模式,有些盆友可能用过 ...

  2. 听飞狐聊JavaScript设计模式系列07

    本回内容介绍 上一回聊到JS单例模式(singleton),做了一道题,内容不多,比较容易理解. 介一回嘞,聊聊工厂模式,之前聊到过工厂模式,这回聊深入点儿,可能会比较抽象,不过好在实际开发中使用还算 ...

  3. 听飞狐聊JavaScript设计模式系列13

    本回内容介绍 上一回聊了聊组合模式(Composite),用组合模式模拟了个图片库,聊了递归. 介一回聊状态模式(State),官方描述允许一个对象在其内部状态改变时改变它的行为.略抽象,不过看了代码 ...

  4. javascript设计模式系列 - LukeLin - 博客园

    javascript设计模式系列 创建型: 1.抽象工厂模式(Abstract Factory) 2.构建者模式(Builder) 3.工厂方法模式(Factory Method) 4.原型模式(Pr ...

  5. JavaScript设计模式系列—模式篇总结(上)

    转载请注明预见才能遇见的博客:http://my.csdn.net/ 原文地址:https://blog.csdn.net/pcaxb/article/details/102517956 JavaSc ...

  6. JavaScript设计模式系列四之外观模式(附案例源码)

    文章初衷 设计模式其实旨在解决语言本身存在的缺陷, 目前javaScript一些新的语法特性已经集成了一些设计模式的实现, 大家在写代码的时候,没必要为了用设计模式而去用设计模式, 那么我这边为什么还 ...

  7. 《JavaScript设计模式》——11.2 一切只因跨域

    本节书摘来自异步社区<JavaScript设计模式>一书中的第11章,第11.2节,作者:张容铭著,更多章节内容可以访问云栖社区"异步社区"公众号查看 11.2 一切只 ...

  8. 《JavaScript设计模式》——11.3 站长统计

    本节书摘来自异步社区<JavaScript设计模式>一书中的第11章,第11.3节,作者:张容铭著,更多章节内容可以访问云栖社区"异步社区"公众号查看 11.3 站长统 ...

  9. javascript设计模式系列

    创建型: 1.抽象工厂模式(Abstract Factory) 2.构建者模式(Builder) 3.工厂方法模式(Factory Method) 4.原型模式(Prototype) 5.单例模式(S ...

最新文章

  1. Linux命令学习,学习这20条Linux命令,玩转你的树莓派!
  2. 使用网络存储SAN和NAS
  3. ******中最常用的网络命令
  4. Build 2019:微软正式宣布 .NET 5
  5. BeanUtil使用例子:解析并转化HttpServletRequest到Bean的全面测试
  6. 漫步最优化七——介绍
  7. 【报告分享】2020中国直播电商趋势洞察与运营指导报告.pdf(附下载链接)
  8. hmcl手机版_hmcl启动器app下载
  9. Linux系统下在windows虚拟机中使用数位板的问题及解决办法
  10. 在线编辑Word——插入公式
  11. 怎么把PDF转换成jpg图片?这两种方法快来get
  12. 高德地图驾车导航内存优化原理与实战
  13. r语言做断轴_手把手教你用R语言做回归后的残差分析
  14. 基于蜜蜂优化算法优化的卷积神经网络(CNN)图像分类——附代码
  15. java使用微信表情代码_iOS高仿微信表情输入功能代码分享
  16. UPP映象(A C++ GUI lib)
  17. n枚硬币中找到问题硬币
  18. 发那科机器人override指令_【发那科】机器人控制指令介绍(二)
  19. 计算机关于职业与道德的论文怎么写,计算机职业道德论文.doc
  20. Bzoj1057 [ZJOI2007]棋盘制作

热门文章

  1. struts2 helloworld
  2. jvm莫名退出问题解决
  3. 修改notebook的默认路径_更改jupyter notebook默认存储路径
  4. Android Camera open运行流程
  5. Linux下一些简单命令的收集
  6. 设计模式的皇后-观察者模式
  7. jquery的选择器之-表单对象属性过滤选择器
  8. 五分钟读懂UML类图(转)
  9. iOS开发之控制器的创建
  10. html5实现饼图和线图-我们到底能走多远系列(34)