设计模式之行为型命令模式

将请求与实现解耦并封装成独立对象,从而使不同的请求对客户端的实现参数化。
命令模式是将创建模块的逻辑封装在一个对象里,这个对象提供一个参数化的请求接口,通过调用这个接口并传递一些参数实现调用命令对象内部中的一些方法。请求部分很简单,只需要按照给定参数格式书写指令即可,所以实现部分的封装才是重点,因为它要为请求部分提供所需方法。

// 模块实现模块
var viewCommand = (function() {
  var tpl = {
    // 展示图片结构模块
    product: [
          ‘<div>‘,.....,‘</div>‘
      ].join(‘‘),
    // 展示标题结构模块
    title: [
      ‘<div>‘,.....,‘</div>‘
      ].join(‘‘)
  },
  // 格式化字符串缓存字符串
  html = ‘‘;
  // 格式化字符串
  function formateString(str, obj) {}
  // 方法集合
  var Action = {
    // 创建方法
    create: function(data, view) {
      // 解析数据
      if(data.length) {
        // 遍历
        for(var i = 0, len = data.length; i < len; i++) {
          html += formateString(tpl[view], data[i]);
        }
      } else {
        html += formateString(tpl[view], data);
      }
    },
    // 展示方法
    display: function(container, data, vuew) {
      // 如果传入数据
      if(data) {
        // 根据给的数据创建视图
        this.create(data, view);
      }
      // 展示模块
      document.getElementById(container).innerHTML = html;
      // 展示后清空缓存字符串
      html = ‘‘;
    }
  }
  // 命令接口
  return function excute(msg) {
    // 解析命令,如果msg.param不是数组则将其转化为数组
    msg.param = Object.prototype.toString.call(msg.param) === "[object Array]" ? msg.param : [msg.param];
    // Action内部调用的方法引用this,此处保证作用域this执行传入Action
    Action[msg.command].apply(Action, msg.param)
  }
})();

测试命令对象

var productData = [
  {
    src: ‘command/02.jpg‘,
    text: ‘绽放的桃花‘
  },
  {
    src: ‘command/03.jpg‘,
    text: ‘阳光下的温馨‘
  }
],
// 模块标题数据
titleData = {
  title: ‘夏日里的一片温馨‘,
  tips: ‘暖暖的温情带给人们家的感觉‘
}
// 调用命令对象
viewCommand({
  command: ‘display‘,
  param: [‘title‘, titleData, ‘title‘]
});
viewCommand({
  command: ‘create‘,
  param: [‘product‘, productData, ‘product‘]
});

有了命令模式,想创建任何页面视图都是一件很简单的事情。

时间: 2024-08-24 19:53:03

设计模式之行为型命令模式的相关文章

编程模式之15---行为型----命令模式

定义 将一个请求封装成一个对象,让你可以用不同的请求对客户端进行参数化,对请求排队,纪录请求日志和支持可撤消操作. 有三个具体成员,请求的发送者,请求的接收者,还有就是请求本身(或者是命令).对客户端进行参数化,也就是客户端可以把请求对象当成一个参数,直接注入到请求发送者内部,不用管请求接收者;对请求排队,如果一个请求发送者发送了一个请求,有多个接收者会处理这个请求的话,那么就需要对命令排队,命令对象和请求接收者是一一对应的;纪录请求日志,当发出一个请求时,由命令对象来保存一些信息,证明本对象被

设计模式14:Command 命令模式(行为型模式)

Command 命令模式(行为型模式) 耦合与变化 耦合是软件不能抵御变化的根本性原因.不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系. 动机(Motivation) 在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合——比如对行为进行“记录.撤销/重做(undo/redo).事务”等处理,这种无法抵御变化的紧耦合是不合适的. 在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的解耦. 意

设计模式-行为型-命令模式(COMMAND)

命令模式是一个结构比较简单的设计模式,gof在书中对它的定义是:"将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作." 这里有两个要点,第一请求被封装成了一个对象,第二请求可以被持久化(排队或是记录.取消). 我们从第一个要点说起.首先需要注意一点的所有COMMAND的模型都可以抽象出一个Execute概念或是类似概念.如下图(左)一样,这里的请求就是对文档做出paste操作,封装的结果就是通过PasteCommand的一

[设计模式-行为型]命令模式(Command)

一句话 命令的请求和命令的执行用不同的对象表示.(好处是可以独立开发,也可以进行撤销) 概括 解析 COMMAND-俺有一个MM家里管得特别严,没法见面,只好借助于她弟弟在我们俩之间传送信息,她对我有什么指示,就写一张纸条让她弟弟带给我.这不,她弟弟又传送过来一个COMMAND,为了感谢他,我请他吃了碗杂酱面,哪知道他说:"我同时给我姐姐三个男朋友送COMMAND,就数你最小气,才请我吃面."命令模式:命令模式把一个请求或者操作封装到一个对象中.命令模式把发出命令的责任和执行命令的责任

JAVA设计模式(15):行为型-命令模式(Command)

介绍 命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化:对请求排队或者记录请求日志,以及支持可撤销的操作.也称之为:动作Action模式.事务transaction模式. 结构 Command抽象命令类 定义命令的接口,声明执行的方法. ConcreteCommand具体命令类 命令接口实现对象,是"虚"的实现:通常会持有接收者,并调用接收者的功能来完成命令要执行的操作. Invoker调用者/请求者 请求的发送者,它通过命令对象来执行请求.一个调用者并不需

设计模式-行为型-命令模式

命令模式(Command): 将请求封装成对象,以便使用不同的请求.日志.队列等来参数化其他对象.命令模式也支持撤销操作. 命令模式的角色: 1)传递命令对象(Invoker):是请求的发送者,它通常拥有很多的命令对象,并通过访问命令对象来执行相关请求,它不直接访问接收者. 2)抽象命令接口(Command):声明执行命令的接口,拥有执行命令的抽象方法execute(). 3)具体的命令对象(ConcreteCommand):是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接收者的功能来完

设计模式课程 设计模式精讲 23-1 命令模式讲解

  1 课程讲解 1.1 类型: 1.2 定义: 1.3 适用场景: 1.4 优点: 1.5 缺点: 1.6 命令相关的设计模式 1 课程讲解 1.1 类型: 行为型 1.2 定义: ◆定义:将“请求”封装成对象,以便使用不同的请求 扩展:◆命令模式解决了应用程序中对象的职责以及它们之间的通信方式 详解:下命令对象只知道如何发送请求,不需要知道如何完成称请求 1.3 适用场景: ◆请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交互 ◆需要抽象出等待执行的行为 1.4 优点: ◆降低耦合

javascript设计模式详解之命令模式

每种设计模式的出现都是为了弥补语言在某方面的不足,解决特定环境下的问题.思想是相通的.只不过不同的设计语言有其特定的实现.对javascript这种动态语言来说,弱类型的特性,与生俱来的多态性,导致某些设计模式不自觉的我们都在使用.只不过没有对应起来罢了.本文就力求以精简的语言去介绍下设计模式这个高大上的概念.相信会在看完某个设计模式之后有原来如此的感慨. 一.基本概念与使用场景: 基本概念: 将请求封装成对象,分离命令接受者和发起者之间的耦合. 命令执行之前在执行对象中传入接受者.主要目的相互

设计模式学习笔记之命令模式

命令模式 将“请求”封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作. 说明: 1.命令模式将发出请求的对象和执行请求的对象解耦: 2.在被解耦的两者之间是通过命令对象进行沟通的.命令对象封装了接受者和一个或一组动作: 3.调用者通过调用命令对象的execute()发出请求,这会使得接受者的动作被调用: 4.调用者可以接受命令当做参数,甚至在运行时动态地进行: 5.命令可以支持撤销,做法事实现一个undo()方法来回到exexcute()被执行前的状态: