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_13_执行模型详解
Oct 20 Javascript
javascript之典型高阶函数应用介绍
Jan 10 Javascript
JS实现从表格中动态删除指定行的方法
Mar 31 Javascript
javascript函数式编程实例分析
Apr 25 Javascript
jQuery中的通配符选择器使用总结
May 30 Javascript
深入理解JS继承和原型链的问题
Dec 17 Javascript
简单实现jquery隔行变色
Nov 09 jQuery
简单谈谈CommonsChunkPlugin抽取公共模块
Dec 31 Javascript
Vue项目中设置背景图片方法
Feb 21 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
Dec 29 Javascript
JavaScript设计模式之策略模式实现原理详解
May 29 Javascript
详解Vue.js 响应接口
Jul 04 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
php对mongodb的扩展(初出茅庐)
2012/11/11 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
Python学习笔记之解析json的方法分析
2017/04/21 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
pandas参数设置的实用小技巧
2020/08/23 Python
python编写实现抽奖器
2020/09/10 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
J2EE中常用的名词进行解释
2015/11/09 面试题
高中美术教学反思
2014/01/19 职场文书
小学生环保演讲稿
2014/04/25 职场文书
工程售后服务方案
2014/06/08 职场文书
拓展训练激励口号
2014/06/17 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技