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禁止小键盘输入数字功能代码
Aug 01 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
Jun 24 Javascript
用jquery存取照片的具体实现方法
Jun 30 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
Dec 03 Javascript
JQuery+EasyUI轻松实现步骤条效果
Feb 22 Javascript
BootStrap table表格插件自适应固定表头(超好用)
Aug 24 Javascript
浅谈js键盘事件全面控制
Dec 01 Javascript
vue-cli单页应用改成多页应用配置详解
Jul 14 Javascript
Vue项目组件化工程开发实践方案
Jan 09 Javascript
vue配置请求本地json数据的方法
Apr 11 Javascript
浅谈redux以及react-redux简单实现
Aug 28 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
Nov 12 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和ACCESS写聊天室(一)
2006/10/09 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
jquery密码强度校验
2015/12/02 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
浅析Python多线程下的变量问题
2015/04/28 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
美国女孩服装购物网站:Justice
2017/03/04 全球购物
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
库房主管岗位职责
2013/12/31 职场文书
美发店5.1活动方案
2014/01/24 职场文书
节能宣传周活动总结
2014/05/08 职场文书
英文升职感谢信
2015/01/23 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
python图片灰度化处理的几种方法
2021/06/23 Python
redis 存储对象的方法对比分析
2021/08/02 Redis
win10清理dns缓存
2022/04/19 数码科技
Nginx跨域问题解析与解决
2022/08/05 Servers