javascript设计模式 ? 外观模式原理与用法实例分析


Posted in Javascript onApril 15, 2020

本文实例讲述了javascript设计模式 ? 外观模式原理与用法。分享给大家供大家参考,具体如下:

介绍:外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,隐藏系统复杂度,降低子系统与客户端的耦合度。

定义: 为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

场景:我们还是用画圆的方式来介绍下外观模式。

示例:

var Rectangle = function(){
  this.draw = function(){
    console.log('画一个矩形');
  }
}
 
var Circle = function(){
  this.draw = function(){
    console.log('画一个圆');
  }
}
 
var Triangle = function(){
  this.draw = function(){
    console.log('画一个三角形');
  }
}
 
var ShapeMaker = function(){
  this.rectangle = new Rectangle();
  this.circle = new Circle();
  this.triangle = new Triangle();
 
  this.drawRectangle = function(){
    this.rectangle.draw();
  }
 
  this.drawCircle = function(){
    this.circle.draw();
  }
 
  this.drawTriangle = function(){
    this.triangle.draw();
  }
}
 
var shapeMaker = new ShapeMaker();
 
shapeMaker.drawRectangle(); //画一个矩形
shapeMaker.drawCircle(); //画一个圆
shapeMaker.drawTriangle(); //画一个三角形

是不是豁然开朗?其实我们日常最常用的就是外观模式。我们的工具类,jquery,包括一些浏览器兼容,我们都会把他们封装到一个对象里。

这就是外观模式提倡的把复杂的操作封装到一个简单接口中。几乎所有的涉及多个业务对象交互的场景都可以考虑使用外观模式进行重构。

外观模式总结:

优点:
* 对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并且提升使用便捷度。
* 实现了客户端与子系统之间的松耦合关系,这使得子系统的变化不会影响客户端。

缺点:
* 不能??玫南拗瓶突Ф酥苯邮褂米酉低忱?br /> * 如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开关原则

适用场景:
* 需要对一个复杂子系统提供一个简单入口时可以采用外观模式

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
超强的IE背景图片闪烁(抖动)的解决办法
Sep 09 Javascript
jQuery 扩展对input的一些操作方法
Oct 30 Javascript
js中字符替换函数String.replace()使用技巧
Aug 14 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
Apr 11 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
Jun 09 Javascript
javascript获取checkbox复选框获取选中的选项
Aug 12 Javascript
javascript中select下拉框的用法总结
Jan 07 Javascript
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
Vue 一键清空表单的实现方法
Feb 07 Javascript
小程序实现背景音乐播放和暂停
Jun 19 Javascript
Vue页面跳转传递参数及接收方式
Sep 09 Javascript
js实现抽奖功能
Nov 24 Javascript
写给新手同学的vuex快速上手指北小结
Apr 14 #Javascript
vue-cli设置publicPath小记
Apr 14 #Javascript
vue 实现用户登录方式的切换功能
Apr 14 #Javascript
react 不用插件实现数字滚动的效果示例
Apr 14 #Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
Apr 14 #Javascript
编写一个javascript元循环求值器的方法
Apr 14 #Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
Apr 14 #Javascript
You might like
数据库中排序的对比及使用条件详解
2012/02/23 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
2010/05/06 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
python用列表生成式写嵌套循环的方法
2018/11/08 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
敬老月活动总结
2014/08/28 职场文书
医德医风自我评价
2014/09/19 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
民间借贷被告代理词
2015/05/23 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
2022/04/02 Servers