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 相关文章推荐
Javascript 实现TreeView CheckBox全选效果
Jan 11 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
Oct 12 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
Nov 07 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
Apr 18 Javascript
Angular JS数据的双向绑定详解及实例
Dec 31 Javascript
javascript中apply/call和bind的使用
Feb 15 Javascript
详解vue.js的事件处理器v-on:click
Jun 27 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
Jul 18 Javascript
关于vue单文件中引用路径的处理方法
Jan 08 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
Sep 21 Javascript
JavaScript自定义超时API代码实例
Apr 30 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
Aug 10 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
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
PHP分页类集锦
2014/11/18 PHP
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
python django集成cas验证系统
2014/07/14 Python
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
Python实现控制台进度条功能
2016/01/04 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
python利用7z批量解压rar的实现
2019/08/07 Python
如何在 Django 模板中输出 "{{"
2020/01/24 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
浅谈django 重载str 方法
2020/05/19 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
Python中Yield的基本用法
2020/10/18 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
文明礼仪伴我行演讲稿
2014/05/12 职场文书
大学生心理活动总结
2014/07/04 职场文书
安全生产月宣传标语
2014/10/06 职场文书
小学四年级学生评语
2014/12/26 职场文书
政府会议通知范文
2015/04/15 职场文书
2016党校学习心得体会
2016/01/07 职场文书
Python实现文字pdf转换图片pdf效果
2022/04/03 Python