JS常用的设计模式(7)—— 外观模式
外观模式(门面模式),是一种相对简单而又无处不在的模式。外观模式提供一个高层接口,这个接口使得客户端或子系统更加方便调用。
用一段再简单不过的代码来表示
var getName = function(){ return ''svenzeng" } var getSex = function(){ return 'man' }
如果你需要分别调用getName和getSex函数. 那可以用一个更高层的接口getUserInfo来调用.
var getUserInfo = function(){ var info = a() + b(); return info; }
也许你会问为什么一开始不把getName和getSex的代码写到一起, 比如这样
var getNameAndSex = function(){ return 'svenzeng" + "man"; }
答案是显而易见的,饭堂的炒菜师傅不会因为你预定了一份烧鸭和一份白菜就把这两样菜炒在一个锅里。他更愿意给你提供一个烧鸭饭套餐。同样在程序设计中,我们需要保证函数或者对象尽可能的处在一个合理粒度,毕竟不是每个人喜欢吃烧鸭的同时又刚好喜欢吃白菜。
外观模式还有一个好处是可以对用户隐藏真正的实现细节,用户只关心最高层的接口。比如在烧鸭饭套餐的故事中,你并不关心师傅是先做烧鸭还是先炒白菜,你也不关心那只鸭子是在哪里成长的。
最后写个我们都用过的外观模式例子
var stopEvent = function( e ){ //同时阻止事件默认行为和冒泡 e.stopPropagation(); e.preventDefault(); }
转载于:https://www.cnblogs.com/jymz/p/4273879.html
JS常用的设计模式(7)—— 外观模式相关推荐
- JS常用的设计模式(2)——简单工厂模式
JS常用的设计模式(2)--简单工厂模式 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定 ...
- Swift 中的设计模式 #3 外观模式与适配器模式
作者:Andrew Jaffee,原文链接,原文日期:2018-09-04 译者:郑一一:校对:BigNerdCoding,pmst,Forelax:定稿:Forelax 本文是我的设计模式系列教程的 ...
- Javascript 设计模式之外观模式【讲师辅导】-曾亮-专题视频课程
Javascript 设计模式之外观模式[讲师辅导]-770人已学习 课程介绍 随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...
- 移动开发 | Swift 中的设计模式 #3 外观模式与适配器模式
本文是我的设计模式系列教程的第三篇.在第一篇文章中,我介绍了 创建型模式中的工厂模式和单例模式.在第二篇文章中,又讨论了一下 行为型模式中的观察者模式和备忘录模式. 在本文中,我会就结构型模式中的外观 ...
- 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)
如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧: 分别是瑞雯和 ...
- [设计模式C++]外观模式
系列文章总结一些比较常见的设计模式,外观模式是由GoF提出的23种设计模式的一种,使用非常简单. 2021-09-16 增加一个例子 区别于代理模式,都像是插入第三者,但是外观模式是统筹管理子系统,就 ...
- 研磨设计模式之外观模式(Facade)(解决方案)
3.2 解决方案 3.2.1 外观模式来解决 用来解决上述问题的一个合理的解决方案就是外观模式.那么什么是外观模式呢? (1)外观模式定义 这里先对两个词进行一下说明,一个是界面,一个是接口. 界 ...
- java外观设计修改_Java设计模式之外观模式和装饰器模式的设计(精选)
前言 本篇来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接 ...
- 『设计模式』外观模式--这篇博客也太明了吧
23种设计模式+额外常用设计模式汇总 (持续更新) 外部与一个子系统的通信必须通过一个统一的外观(Facade)对象进行,这就是外观模式. 外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的 ...
最新文章
- leangoo敏捷开发看板工具
- MyEclipse解决Launching xx on MyEclipse Tomcat has encountered a problem
- PHP中的 fastcgi_finish_request();
- 第十二届湖南省赛 (B - 有向无环图 )(拓扑排序+思维)好题
- ExtJS Grid Column Number
- 线性表实现一元多项式操作
- 英语口语-文章朗读Week10 Wednesday
- 编译linux内核适用的编译器,编译Linux内核时,CC,LD和CC [M]输出的代码是什么?...
- Mysql学习总结(53)——使用MySql开发的Java开发者规范
- 如何在jdk官网下载想要的版本
- iOS调用系统相机、相册里面的文字显示英文
- 数据中心服务器芯片温度,【DKV】新建数据中心气流——第二部分:入口温度VS服务器性能...
- linux中数据库的4种状态,数据库的数据持久有几种方案_数据库_数据管理_数据结构_课课家...
- 51单片机控制的自动感应调光、坐姿矫正智能台灯
- npm 清理vue项目缓存
- 深度解析当贝盒子B3、腾讯极光5S、小米盒子4S之间的区别
- turbo linux系统光盘,TurboLinux系统启动软盘的创建方法(转)
- 职场:大学生情侣搭档求职难
- centos 编译 rabbitmq-c 遇到 undefined reference to OPENSSL_init_ssl, BIO_meth_set_read 等报错的解决
- SpaceVim C++开发环境
热门文章
- Hyperledger Fabric 1.0 实战开发系列 第⑤课 fabric 证书解析
- Hyperledger Fabric 1.0 实战开发系列 第一课 系统环境搭建
- Qt 软键盘[模拟]之键盘触发事件
- mysql事务实战_MySQL - 实战 (2) - 事务隔离
- vb定义模块且使用模块_ET200S 1 STEP 步进模块使用入门
- NOIP信息奥赛--1995“同创杯”初中复赛题题解(三)
- ios 系统状态栏样式修改_iOS设置状态栏样式,statusBarStyle
- NOI2020 前最后的日子
- BZOJ 3203 Luogu P3299 [SDOI2013]保护出题人 (凸包、斜率优化、二分)
- ef mysql 数据模型,EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型...