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 相关文章推荐
JavaScript 封装Ajax传递的数据代码
Jun 05 Javascript
学习ExtJS 访问容器对象
Oct 07 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
Dec 03 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
jQuery控制元素隐藏和显示
Mar 03 Javascript
vue实现的仿淘宝购物车功能详解
Jan 27 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
May 14 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
May 15 Javascript
Angular+ionic实现折叠展开效果的示例代码
Jul 29 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
Aug 15 Javascript
浅谈JSON5解决了JSON的两大痛点
Dec 14 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制作静态网站的模板框架
2006/10/09 PHP
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
CI框架常用函数封装实例
2016/11/21 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
python使用any判断一个对象是否为空的方法
2014/11/19 Python
python读取和保存图片5种方法对比
2018/09/12 Python
python实现支付宝转账接口
2019/05/07 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
Python中的类与类型示例详解
2019/07/10 Python
python 解决函数返回return的问题
2020/12/05 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
如何打开WebSphere远程debug
2014/10/10 面试题
企事业单位求职者的自我评价
2013/12/28 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
演讲比赛策划方案
2014/06/11 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP