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 相关文章推荐
漂亮的提示信息(带箭头)
Mar 21 Javascript
JavaScript游戏之是男人就下100层代码打包
Nov 08 Javascript
jQuery学习笔记 更改jQuery对象
Sep 19 Javascript
Javascript 垃圾收集机制介绍理解
May 14 Javascript
jquery默认校验规则整理
Mar 24 Javascript
使用documentElement正确取得当前可见区域的大小
Jul 25 Javascript
jQuery表单域属性过滤器用法分析
Feb 10 Javascript
JS获取图片lowsrc属性的方法
Apr 01 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
Oct 21 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
Apr 13 Javascript
vuex中store存储store.commit和store.dispatch的用法
Jul 24 Javascript
JavaScript实现弹出窗口效果
Dec 09 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读取flv文件的播放时间长度
2009/09/03 PHP
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
php实现12306余票查询、价格查询示例
2014/04/17 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
分享php多功能图片处理类
2016/05/15 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
2015/02/13 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
python的re模块应用实例
2014/09/26 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
解决Mac下使用python的坑
2019/08/13 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
2014全国两会学习心得体会1000字
2014/03/10 职场文书
公益广告语集锦
2014/03/13 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
师德师风的心得体会
2014/09/02 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
科技馆观后感
2015/06/08 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis