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 来操作字符串(一些字符串函数)
Feb 15 Javascript
一个支持任意尺寸的图片上下左右滑动效果
Aug 24 Javascript
js实现多选项切换导航菜单的方法
Feb 06 Javascript
JS实现可点击展开与关闭的左侧广告代码
Sep 02 Javascript
jquery读写cookie操作实例分析
Dec 24 Javascript
javascript简单实现等比例缩小图片的方法
Jul 27 Javascript
AngularJS入门教程之REST和定制服务详解
Aug 19 Javascript
Vue.js中数组变动的检测详解
Oct 12 Javascript
js+springMVC 提交数组数据到后台的实例
Sep 21 Javascript
微信小程序实现禁止分享代码实例
Oct 19 Javascript
vue-cli设置css不生效的解决方法
Feb 07 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
Oct 27 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
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
PHP clearstatcache()函数详解
2010/03/02 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
Python中获取对象信息的方法
2015/04/27 Python
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
Python决策树分类算法学习
2017/12/22 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
行政内勤岗位职责
2014/04/07 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
英文慰问信
2015/02/14 职场文书
学习保证书怎么写
2015/02/26 职场文书
合同审查法律意见书
2015/06/04 职场文书
母亲去世追悼词
2015/06/23 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android