亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

命令模式

命令模式

将执行的命令封装为一个对象,解决命令的发起者与命令的执行者之间的解耦,就叫做命令模式。
命令模式的一大特征就是,命令的发起者可以参数化配置自己的请求。

使用场景

比如有一个网站,很多页面都在使用列表展示的功能,那么这个创建列表的方法就比较适合封装起来,用以简化操作流程。

首先,我们创建一个命令模式的基本模型:

const Command = (() => {
  // 视图模板(因为需求里涉及到创建 html)
  const templates = {
    listTemplate: ``,
  };

  // 将要执行的命令集合
  const actions = {
    createList() {},
  };

  // 调用命令的对外接口
  const excute = () => {};
  return {
    excute,
  };
})();

接下来,就是填充 Command 方法里面的内容:

例子:

<style>
  ul {
    height: 120px;
    list-style: none;
    box-shadow: 0 0 10px #ccc;
    padding: 0;
    padding-left: 15px;
    display: flex;
    flex-direction: column;
    justify-content: space-evenly;
  }
</style>

<ul id="list"></ul>

<script>
  const Command = (() => {
    // 视图模板(因为需求里涉及到创建 html)
    const templates = {
      // 添加字符串模板
      listTemplate: `<li>{{text}}</li>`,
    };

    // 用数据替换视图模板中的'{{}}'
    // 因为通用,所以可以单独提取出来
    const formateString = (str, data) => {
      // key 表示 '{{}}' 中的占位符(text)
      return str.replace(/\{{(\w+)}\}/g, (macth, key) => {
        return data[key];
      });
    };

    // 将要执行的命令集合
    const actions = {
      // 待执行"创建列表"的方法
      createList({ element = 'body', data = [], name = '' } = {}) {
        const ele = document.querySelector(element);
        let html = '';
        if (data.length > 0) {
          data.forEach((v) => {
            html += formateString(templates[name], v);
          });
          ele.innerHTML = html;
        }
      },
    };

    // 调用命令的对外接口
    const excute = ({ type = '', params = {} } = {}) => {
      actions[type](params);
    };
    return {
      excute,
    };
  })();

  // 测试命令模式函数
  const contrys = [
    { text: '阿根廷共和国' },
    { text: '阿拉伯联合酋长国' },
    { text: '阿富汗伊斯兰国' },
  ];

  Command.excute({
    type: 'createList',
    params: {
      element: '#list',
      data: contrys,
      name: 'listTemplate',
    },
  });
</script>

在明确了指令的格式之后,只要写一条指令,配置些许参数,就能够轻松创建一个列表,可以有效提高团队的开发效率。


如有错误,欢迎指正,本人不胜感激。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
1.4萬
獲贊與收藏
860

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消