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的ajax功能实现的RSS Reader 代码
Sep 03 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
Dec 12 Javascript
JS实现遮罩层效果的简单实例
Nov 12 Javascript
js调用后台、后台调用前台等方法总结
Apr 17 Javascript
iframe如何动态创建及释放其所占内存
Sep 03 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
Aug 18 Javascript
JS脚本实现网页自动秒杀点击
Jan 11 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
Feb 28 Javascript
浅谈webpack 构建性能优化策略小结
Jun 13 Javascript
vue项目使用微信公众号支付总结及遇到的坑
Oct 23 Javascript
layui点击数据表格添加或删除一行的例子
Sep 12 Javascript
JavaScript用document.write()输出换行的示例代码
Nov 26 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
在php和MySql中计算时间差的方法
2011/04/22 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
JavaScript 基础问答三
2008/12/03 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
Python CSV模块使用实例
2015/04/09 Python
python提取字典key列表的方法
2015/07/11 Python
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
Python Requests 基础入门
2016/04/07 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
新闻记者个人求职的自我评价
2013/11/28 职场文书
生产内勤岗位职责
2013/12/07 职场文书
人代会标语
2014/06/30 职场文书
买卖合同协议书范本
2014/10/18 职场文书
员工升职自荐信
2015/03/27 职场文书
Python 阶乘详解
2021/10/05 Python
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技