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 相关文章推荐
js/jquery解析json和数组格式的方法详解
Jan 09 Javascript
FF IE浏览器修改标签透明度的方法
Jan 27 Javascript
javascript实现将文件保存到本地方法汇总
Jul 26 Javascript
最丑的时钟效果!js canvas时钟制作方法
Aug 15 Javascript
JQuery 获取Dom元素的实例讲解
Jul 08 jQuery
浅谈JavaScript作用域和闭包
Sep 18 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
Nov 24 Javascript
jQuery Dom元素操作技巧
Feb 04 jQuery
vue使用技巧及vue项目中遇到的问题
Jun 04 Javascript
微信小程序实现顶部导航特效
Jan 28 Javascript
layui实现二维码弹窗、并下载到本地的方法
Sep 25 Javascript
浅谈react路由传参的几种方式
Mar 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
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
php对大文件进行读取操作的实现代码
2013/01/23 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
php curl_init函数用法
2014/01/31 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
js href的用法
2010/05/13 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
Python做文本按行去重的实现方法
2016/10/19 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
利用python爬取有道词典的方法
2020/12/08 Python
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
在购买印度民族服饰:Soch
2020/09/15 全球购物
平面设计师工作职责范文
2013/12/03 职场文书
揭牌仪式主持词
2014/03/19 职场文书
企业文化演讲稿
2014/05/20 职场文书
应用心理学专业求职信
2014/08/04 职场文书
未婚证明格式
2015/06/15 职场文书
行政复议答复书
2015/07/01 职场文书
村主任当选感言
2015/08/01 职场文书
使用canvas对video视频某一刻截图功能
2021/09/25 HTML / CSS
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL