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 相关文章推荐
页面中body onload 和 window.onload 冲突的问题的解决
Jul 01 Javascript
动态样式类封装JS代码
Sep 02 Javascript
jquery移动节点实例
Jan 14 Javascript
自己动手写的jquery分页控件(非常简单实用)
Oct 28 Javascript
非常酷炫的Bootstrap图片轮播动画
May 27 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
Oct 28 Javascript
浅析location.href跨窗口调用函数
Nov 22 Javascript
Vue.Js中的$watch()方法总结
Mar 23 Javascript
JavaScript中各数制转换全面总结
Aug 21 Javascript
pm2启动ssr失败的解决方法
Jun 29 Javascript
javascript实现打砖块小游戏(附完整源码)
Sep 18 Javascript
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
写给新手同学的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
人族 TERRAN 概述
2020/03/14 星际争霸
PHP聊天室技术
2006/10/09 PHP
解析php取整的几种方式
2013/06/25 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
2015/11/25 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
js实现select下拉框选择
2020/01/11 Javascript
python爬取NUS-WIDE数据库图片
2016/10/05 Python
python实现剪切功能
2019/01/23 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
Django REST framework 视图和路由详解
2019/07/19 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
2020/04/16 Python
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
英语专业学子个人的自我评价
2013/10/02 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
公司合作协议书范本
2014/04/18 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
毕业生求职信范文
2014/06/29 职场文书
作风建设年度心得体会
2014/10/29 职场文书
汽车转让协议书范本
2014/12/07 职场文书
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫