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 uploadify 在FF下无效的解决办法
Sep 26 Javascript
JS实现动态给图片添加边框的方法
Apr 01 Javascript
javascript常用功能汇总
Jul 05 Javascript
jQuery+CSS实现简单切换菜单示例
Jul 27 Javascript
js判断价格,必须为数字且不能为负数的实现方法
Oct 07 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
Feb 10 Javascript
JavaScript基本类型值-Number类型
Feb 24 Javascript
关于vue.js组件数据流的问题
Jul 26 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
Mar 14 Javascript
Postman的下载及安装教程详解
Oct 16 Javascript
在vue项目中优雅的使用SVG的方法实例详解
Dec 03 Javascript
使用p5.js实现动态GIF图片临摹重现
Oct 23 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
服务器端解压缩zip的脚本
2006/12/22 PHP
php面向对象全攻略 (七) 继承性
2009/09/30 PHP
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
2016/12/19 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
python网络编程学习笔记(四):域名系统
2014/06/09 Python
以一段代码为实例快速入门Python2.7
2015/03/31 Python
python语言使用技巧分享
2016/05/31 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
pytorch进行上采样的种类实例
2020/02/18 Python
Python 如何对文件目录操作
2020/07/10 Python
南京某公司笔试题
2013/01/27 面试题
高中毕业生的个人自我评价
2014/02/21 职场文书
应用外语系自荐信
2014/06/26 职场文书
化学教育专业自荐信
2014/07/04 职场文书
亲子阅读的活动方案
2014/08/15 职场文书
房屋过户委托书范本
2014/10/07 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
Python 中的Sympy详细使用
2021/08/07 Python
python区块链持久化和命令行接口实现简版
2022/05/25 Python