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 相关文章推荐
对google个性主页的拖拽效果的js的完整注释[转]
Apr 10 Javascript
JavaScript 乱码问题
Aug 06 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
Aug 15 Javascript
一个简单的js动画效果代码
Jul 20 Javascript
jquery 查找select ,并触发事件的实现代码
Mar 30 Javascript
jquery ajax中使用jsonp的限制解决方法
Nov 22 Javascript
jquery实现的网页自动播放声音
Apr 30 Javascript
webpack中的热刷新与热加载的区别
Apr 09 Javascript
vue 表单验证按钮事件交由父组件触发的方法
Dec 17 Javascript
vue使用swiper实现中间大两边小的轮播图效果
Nov 24 Javascript
Vue的props父传子的示例代码
May 20 Javascript
JavaScript 定时器详情
Nov 11 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/11/23 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
Javascript中的数学函数
2007/04/04 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
vue实现折线图 可按时间查询
2020/08/21 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
python连接字符串的方法小结
2015/07/13 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
Python笔记之工厂模式
2019/11/20 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
国家励志奖学金获奖感言
2014/01/09 职场文书
大学军训通讯稿
2014/01/13 职场文书
单位创先争优活动方案
2014/01/26 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
商务助理求职信范文
2014/04/20 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
小学师德师风整改措施
2014/10/27 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android