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 相关文章推荐
把JS与CSS写在同一个文件里的书写方法
Jun 02 Javascript
IE与FireFox中的childNodes区别
Oct 20 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
Nov 10 Javascript
js 一个关于图片onload加载的事
Nov 10 Javascript
IE的事件传递-event.cancelBubble示例介绍
Jan 12 Javascript
JavaScript获取XML数据附示例截图
Mar 05 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
Jun 23 Javascript
jQuery Real Person验证码插件防止表单自动提交
Nov 06 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
Dec 31 Javascript
javascript实现倒计时跳转页面
Jan 17 Javascript
基于canvas实现的绚丽圆圈效果完整实例
Jan 26 Javascript
Node.js操作mysql数据库增删改查
Mar 30 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带公钥加密类分享(每次加密结果都不一样哦)
2014/08/20 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
深入理解javascript的执行顺序
2014/04/04 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
JS继承实现方法及优缺点详解
2020/09/02 Javascript
Python的Django框架安装全攻略
2015/07/15 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
一行Python代码过滤标点符号等特殊字符
2019/08/12 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
毕业实习个人鉴定范文
2013/12/10 职场文书
大学毕业感言100字
2014/02/03 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
驻村工作先进事迹
2014/08/14 职场文书
初婚未育证明样本
2015/06/18 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书