zoukankan      html  css  js  c++  java
  • 设计模式之行为型命令模式

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

    // 模块实现模块
    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']
    });

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

  • 相关阅读:
    快速构建一个vue项目的开发环境(基础)
    一个vue的简单例子
    webpack基础使用
    程序日志正常,linux进程异常终止,如何查看日志
    mysql多字段排序
    mysql连表
    go网络
    go通道关闭
    【软考】CMMI的5个等级和22个过程域
    maven工程导入时解决Cannot change version of project facet Dynamic Web Module to 2.3
  • 原文地址:https://www.cnblogs.com/camille666/p/design_pattern_behavior_command.html
Copyright © 2011-2022 走看看