JavaScript设计模式--桥梁模式引入操作实例分析


Posted in Javascript onMay 23, 2020

本文实例讲述了JavaScript设计模式--桥梁模式引入操作。分享给大家供大家参考,具体如下:

1.使用情况

(1)事件的监控

#1,利用页面的button来选择宠物的例子(思路)

button.addEvent(element,"click",getPetByBame);
  function getPetByBame(e){
    var id = this.id;
    asyncRquest("GET",'pet.action?id='+id,function(pet){
      consols.log("request pet"+pet.resopnseText)
    })
  }

#2,addEvent函数

/*obj:需要增加事件的对象
* type:事件名称
* fn:执行事件的函数
* */
function addEvent(obj,type,fn){//addEvent:为某个文档节点增加事件的方法
  if(obj.addEventListener){//Mozilla中:
    obj.addEventListener(type,fn,false);
  }else if(obj.attachEvent){//IE中:
    obj["e"+type+fn] = fn;
    obj[type+fn] = function(){
      obj["e"+type+fn]()
    }
    obj.attachEvent("on"+type,fn)
  }
}

总结:该种方式对于单元测试很难进行

改进为用简单的桥梁模式来解决

#1,后台中的api

function getPetByBame(id,callBack){
    sayncRquest("GET",'url?id='+id,function(pet){
      callBack(pet)
    })

#2,桥梁

//定义一个桥梁叫抽象和实现相互联系在一起
  addEvent(element,"click",getPetByNameBridge)
  function getPetByNameBridge(){
    getPetByBame(this.id,function(pet){
      consols.log("request pet"+pet.resopnseText);
    })
  }

总结:这种做法使API和展现层完全分离,API和展现层可以灵活的变动。

(2)特权函数

//特权函数
var privilege=function () {
  //信息全封闭,内部业务逻辑复杂,做成一个特权函数,使调用方便
  var complex=function (x,y) {
    //复杂的数学处理
  }

 this.bridge=function () { //提供公共接口,返回一个单体
   return {
     bridgeAdd:function () {
       //处理前
       complex(1,2);
       //处理后
     }

   }
 }
}

(3)多个类的连接

//多个类的连接
var class1=function (a,b) {
  this.a=a;
  this.b=b;
}
  var class2=function (e) {
    this.e=e;
  }
  //桥梁的连接
  var bridgeClass=function () {
    this.one=new Class1(1,2);
    this.two=new Class1(1);
  }
//目的:两个类能独立的修改,而门面的意义在于调用方便

桥梁模式:

JavaScript设计模式--桥梁模式引入操作实例分析

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js中符号转意问题示例探讨
Aug 19 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
Nov 19 Javascript
Vue.JS入门教程之自定义指令
Dec 08 Javascript
jquery滚动条插件(可以自定义)
Dec 11 Javascript
ES2015 Symbol 一种绝不重复的值
Dec 25 Javascript
jQuery实现获取h1-h6标题元素值的方法
Mar 06 Javascript
利用Three.js如何实现阴影效果实例代码
Sep 26 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
Jan 21 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
Mar 06 Javascript
基于vue-video-player自定义播放器的方法
Mar 21 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
Jul 01 Javascript
vue实现一拉到底的滑动验证
Jul 25 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
May 23 #Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
May 23 #Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
May 22 #Javascript
微信小程序点击滚动到指定位置的实现
May 22 #Javascript
使用JavaScript通过前端发送电子邮件
May 22 #Javascript
uni-app微信小程序登录授权的实现
May 22 #Javascript
jQuery 选择器用法实例分析【prev + next】
May 22 #jQuery
You might like
咖啡常见的种类
2021/03/03 新手入门
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
php全排列递归算法代码
2012/10/09 PHP
分享PHP守护进程类
2015/12/30 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
python+POP3实现批量下载邮件附件
2018/06/19 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
什么是事务?事务有哪些性质?
2012/03/11 面试题
string = null 和string = ''的区别
2013/04/28 面试题
建筑班组长岗位职责
2014/01/02 职场文书
ktv好的活动方案
2014/08/17 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
通知格式
2015/04/27 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL