每种设计模式的出现都是为了弥补语言在某方面的不足,解决特定环境下的问题。思想是相通的。只不过不同的设计语言有其特定的实现。对javascript这种动态语言来说,弱类型的特性,与生俱来的多态性,导致某些设计模式不自觉的我们都在使用。只不过没有对应起来罢了。本文就力求以精简的语言去介绍下设计模式这个高大上的概念。相信会在看完某个设计模式之后有原来如此的感慨。

  一、基本概念与使用场景:

  基本概念:

  将请求封装成对象,分离命令接受者和发起者之间的耦合。 命令执行之前在执行对象中传入接受者。主要目的相互之间的解耦。简单而言分为三个对象,

  1、发起者:发出调用命令即可,具体如何执行,谁执行并不需要清楚。

   2、接受者:有对应的接口处理不同的命令,至于命令是什么,谁发出的,不用关心

  3、命令对象:上面讲发起者和接受者分开了,二者之间需要个连接桥梁。这就是命令对象。命令对象接受发送者的调用,然后调用接受者的相应接口。

  下面有个简单的图表示下三者关系(忽略画图技术,要透过现象看本质):

    

  使用场景: 发布一些命令,但不清楚接受者和请求的操作。命令是指执行某些事情的指令。即只用知道发布了一个指令就行,具体做什么谁来做不用关心。其实是回调函数面向对象的替代品。最常见的例子就是事件绑定了

  二、实例:

    可能看了上面的内容大家还是感到有点迷糊,当然了只看理论其实很难理解一个东西的。我们下面举个栗子:

    场景如下:有个按钮button,点击之后,调用menu对象的refresh方法,输出‘refresh’的内容。    

 1 /***
2 * 非命令模式的绑定事件,就不严谨的鞋全部代码了
3 *
4 */
5 button.onClick(function (e) {
6 var menu = {
7 refresh: function () {
8 /**
9 * 执行命令,
10 */
11 console.log('refresh')
12 }
13 }
14 /**
15 * 发出命令
16 */
17 menu.refresh()
18 })
19 /**
20 * 触发事件
21 */
22 button.trigger('click')

   这样写应该是常用的的写法,当然menu对象在哪里定义就随心情了,都影响不大。如果使用命令模式可以对比一下。我这里代码就贴个图好了(因为是比较早的笔记了,手懒):

   

  简单分析下这个例子:

   一、发送者(setCommond):不关心给哪个button,以及绑定什么事件,只要通过参数传入就好。

  二、命令对象(commondObj):只需要接收到接受者的参数,当发送者发出命令时,执行就好。

  三、接受者(menu):不用关心在哪里被调用被谁调用,只需要按需执行就好了。

  可能从这一个简单的例子没发现命令模式有什么好处,当然了,设计模式的初衷也不是为了解决简单问题的。设想,当有n个button,对应不同的接口时。就能看出来差别了,可能按部就班的绑定n多个事件之后。你会发现多写几个setCommond(btn,obj)更简单。

三、结束语:

  到这里,设计模式就介绍完了。可能大部分时候我们也这么做了,只不过你没有注意到它还有这么个严肃的名称。

  重复而言,使用设计模式的目的是为了提高我们解决问题的效率,不同的设计模式也是针对不同环境的特定方案,不仅仅是单独的某一种设计模式,大多数情况下都是多个模式共存的。切勿为了使用设计模式而强行引入,也切勿不同情况坚持使用某一种设计模式。不要被形式总之快速高效的解决问题才是我们的唯一目的。

相关章节:javascript设计模式详解之命令模式

参考文章:JavaScript设计模式与开发实践

javascript设计模式详解之命令模式的更多相关文章

  1. javascript设计模式详解之策略模式

    接上篇命令模式来继续看下js设计模式中另一种常用的模式,策略模式.策略模式也是js开发中常用的一种实例,不要被这么略显深邃的名字给迷惑了.接下来我们慢慢看一下. 一.基本概念与使用场景: 基本概念:定 ...

  2. Javascript设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  3. javascript设计模式学习之九——命令模式

    一.命令模式使用场景及定义 命令模式常见的使用场景是:有时候需要向某些对象发送请求,但是并不知道请求的接受者是谁,也不知道请求的具体操作是什么.此时希望用一种松耦合的方式来设计程序,使得请求的发送者和 ...

  4. Java常用设计模式详解1--单例模式

    单例模式:指一个类有且仅有一个实例 由于单例模式只允许有一个实例,所以单例类就不可通过new来创建,而所有对象都默认有一个无参的构造函数可以创建对象,所以单例类不仅不能提供public的构造方法,还需 ...

  5. Javascript常用的设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  6. 设计模式详解及PHP实现:代理模式

    [目录] 代理模式(Proxy pattern) 代理模式是一种结构型模式,它可以为其他对象提供一种代理以控制对这个对象的访问. 主要角色 抽象主题角色(Subject):它的作用是统一接口.此角色定 ...

  7. [ 转载 ] Java开发中的23种设计模式详解(转)

    Java开发中的23种设计模式详解(转)   设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...

  8. android java 设计模式详解 Demo

    android java 设计模式详解 最近看了一篇设计模式的文章,深得体会,在此基础我将每种设计模式的案例都写成Demo的形式,方便读者研究学习, 首先先将文章分享给大家: 设计模式(Design ...

  9. Java温故而知新(5)设计模式详解(23种)

    一.设计模式的理解 刚开始“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目 ...

随机推荐

  1. HTML5 WebSocket和后端C#通信

    1.使用 HTML5 开发离线应用 http://www.ibm.com/developerworks/cn/web/1011_guozb_html5off/ 2.利用html 5 websocket ...

  2. EDP转接IC NCS8805:RGB/LVDS转EDP芯片,带Scaler

    RGB/LVDS-to-eDP Converter w/ Scaler1 FeaturesEmbedded-DisplayPort (eDP) Output1/2/4-lane eDP @ 1.62/ ...

  3. 原生js实现tab切换

    //通过原生js实现table切换<html><head><meta http-equiv="Content-Type" content=" ...

  4. FunDA:一个开源的函数式数据处理工具库,也是Slick的补充

    如果你是一个Slick用户,或者你是一个数据库编程人员正在尝试进入函数式编程模式,那么FunDA可能会帮到你. 目前市面上FRM(Functional Relational Mapper),即函数式的 ...

  5. 我的iOS博客旅行开始了,欢迎光临!

    期待您的关注!

  6. Ubuntu16.04安装NVIDIA驱动时的一些坑与解决方案

    这几天在新购置的笔记本上部署工作环境,在安装NVIDIA驱动的时候遇到了不少坑,重装了很多次,在Ubuntu论坛以及其他资料源看了很多大牛的分析,最终终于解决了一个又一个问题,过程比较艰辛,所以决定写 ...

  7. 初探CSRF在ASP.NET Core中的处理方式

    前言 前几天,有个朋友问我关于AntiForgeryToken问题,由于对这一块的理解也并不深入,所以就去研究了一番,梳理了一下. 在梳理之前,还需要简单了解一下背景知识. AntiForgeryTo ...

  8. IO流中的Stream相关对象

    流无处不在,只要是关于到文件的输入.输出.更新等,关于IO流,项目中还是经常用到的,写log日志免不了要与其打交道,现在需要用到,就顺道好好回顾一下进行整理,首先是几个需要用到的类的说明,其实说简单点 ...

  9. 笔记整理:计算CPU使用率 ----linux 环境编程 从应用到内核

    linux 提供time命令统计进程在用户态和内核态消耗的CPU时间: [root@localhost ~]# time sleep real 0m2.001s user 0m0.001s sys 0 ...

  10. uc广告过滤你能更坑点不

    背景: 搞的手机站要上线,电脑测试木有问题,拿手机访问,有个页面始终不正常, 其他的 windows phone 的正常, ios 的也正常 就唯独 ,用的是安卓,uc的浏览器显示有问题 我勒个去,那 ...