javascript设计模式 ? 桥接模式原理与应用实例分析


Posted in Javascript onApril 13, 2020

本文实例讲述了javascript设计模式 ? 桥接模式原理与应用。分享给大家供大家参考,具体如下:

介绍:如果软件系统中某个类存在两个或多个独立变化的维度,可以通过桥接模式将这些维度分离出来,使两者可以独立扩展,让系统更符合单一职责原则。

定义:将抽象部分与其实现部分分离,使他们都可以独立的变化。它是一种对象结构型模式,又称为柄体模式或接口模式。

场景:我们做一个简单的画圆,将圆的半径和颜色这两个维度进行分离,使每一个维度都可以单独扩展,很多同学都说这么简单一个需求我5行代码就实现了。为什么写这么??乱惶住?br /> 我们这里分享的是设计思想,当你的系统足够复杂时需要用什么样的方式进行优化。作为示例,也只是用最小的例子把道理讲明白,不是说所有类似的地方就必须这么写。什么样的场景需要什么样的模式,需不需要用模式需要你自己去考量。

示例:

var CircularColor = {};
CircularColor.redCircular = function(){
  this.getColor = function(){
    return 'red';
  }
}
CircularColor.greenCircular = function(){
  this.getColor = function(){
    return 'green';
  }
}
 
var CircularRadius = {};
CircularRadius.small = function(){
  this.x = this.y = 0;
  this.radius = 5;
  this.color = null;
  this.setColor = function(circularColor){
    this.color = circularColor.getColor();
  }
  this.draw = function(){
    console.log('画一个小圆!颜色:' + this.color + ' 原点坐标:x:' + this.x + ' y:' + this.y + ' 半径:' + this.radius);
  }
}
CircularRadius.big = function(){
  this.x = this.y = 0;
  this.radius = 20;
  this.color = null;
  this.setColor = function(circularColor){
    this.color = circularColor.getColor();
  }
  this.draw = function(){
    console.log('画一个大圆!颜色:' + this.color + ' 原点坐标:x:' + this.x + ' y:' + this.y + ' 半径:' + this.radius);
  }
}
 
var color = new CircularColor.redCircular();
var radius = new CircularRadius.big();
radius.setColor(color);
radius.draw();//画一个大圆!颜色:red 原点坐标:x:0 y:0 半径:20

这节需要说一个点,桥接模式在java的介绍里,独立之后的维度是在抽象层会建立关联关系,js没有抽象层,所以两个独立维度通过一个setColor方法建立关联关系。

桥接模式总结:

优点:

* 桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,符合开关原则。
* 多数情况下,桥接模式可以取代多层集成方案。
* 分离接口及其实现部分,使得实现可以沿着各自的维度来变化。

缺点:

* 桥接模式的使用会增加系统的理解与设计难度。
* 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

适用场景:

* 一个类存在两个或多个独立变化的维度,且这些维度都需要独立进行扩展。

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

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

Javascript 相关文章推荐
jQuery源码解读之hasClass()方法分析
Feb 20 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
Aug 09 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
Oct 23 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
Jan 17 Javascript
Javascript实现汉字和拼音互转的终极方案
Oct 19 Javascript
angular仿支付宝密码框输入效果
Mar 25 Javascript
解决layer弹层遮罩挡住窗体的问题
Aug 17 Javascript
深入理解react-router 路由的实现原理
Sep 26 Javascript
vue-cli3.0 环境变量与模式配置方法
Nov 08 Javascript
vue路由跳转传递参数的方式总结
May 10 Javascript
JavaScript canvas实现文字时钟
Jan 10 Javascript
WebWorker 封装 JavaScript 沙箱详情
Nov 02 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
Apr 13 #Javascript
JavaScript创建表格的方法
Apr 13 #Javascript
JavaScript实现捕获鼠标坐标
Apr 12 #Javascript
jquery实现轮播图特效
Apr 12 #jQuery
用jQuery实现抽奖程序
Apr 12 #jQuery
javascript实现画板功能
Apr 12 #Javascript
JS实现随机点名器
Apr 12 #Javascript
You might like
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
PHP 中文乱码解决办法总结分析
2009/07/30 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
php自动加载代码实例详解
2021/02/26 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
python+django快速实现文件上传
2016/10/24 Python
python实现多线程抓取知乎用户
2016/12/12 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
2015年卫生院健康教育工作总结
2015/07/24 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
导游词之舟山普陀山
2019/11/06 职场文书