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 onkeydown,onkeyup,onkeypress,onclick,ondblclick
Feb 04 Javascript
JavaScript 原型链学习总结
Oct 29 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
Dec 07 Javascript
instanceof和typeof运算符的区别详解
Jan 06 Javascript
JavaScipt中栈的实现方法
Feb 17 Javascript
详解原生js实现offset方法
Jun 15 Javascript
使用ajax的post同步执行(实现方法)
Dec 21 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
Dec 05 Javascript
浅谈redux, koa, express 中间件实现对比解析
May 23 Javascript
了解JavaScript表单操作和表单域
May 27 Javascript
详解Vue中的基本语法和常用指令
Jul 23 Javascript
微信小程序实现聊天室
Aug 21 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 Image Resize图片大小调整的函数代码
2011/01/17 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
Python简单连接MongoDB数据库的方法
2016/03/15 Python
python中的变量如何开辟内存
2018/06/26 Python
Python3几个常见问题的处理方法
2019/02/26 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
用python批量下载apk
2020/12/29 Python
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
我的中国梦演讲稿500字
2014/08/19 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
英语演讲开场白
2015/05/29 职场文书
运动会通讯稿100字
2015/07/20 职场文书
Mysql Show Profile
2021/04/05 MySQL
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript