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']
    });

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

  • 相关阅读:
    51 Nod 1068 Bash游戏v3
    51 Nod Bash 游戏v2
    51 Nod 1073 约瑟夫环
    UVA 12063 Zeros and ones 一道需要好好体会的好题
    51 Nod 1161 Partial sums
    2018中国大学生程序设计竞赛
    UVA 11971 Polygon
    UVA 10900 So do you want to be a 2^n-aire?
    UVA 11346 Possibility
    python with as 的用法
  • 原文地址:https://www.cnblogs.com/camille666/p/design_pattern_behavior_command.html
Copyright © 2011-2022 走看看