天天一个设想形式之敕令形式

作者按:《天天一个设想情势》旨在开端体会设想情势的精华,现在采纳
javascript
python两种言语完成。固然,每种设想情势都有多种完成体式格局,但此小册只纪录最直接了当的完成体式格局 :)

原文地点是:《天天一个设想情势之敕令情势》

迎接关注个人手艺博客:godbmw.com。每周 1 篇原创手艺分享!开源教程(webpack、设想情势)、口试刷题(偏前端)、学问整顿(每周细碎),迎接历久关注!

假如您也想举行学问整顿 + 搭建功用完美/设想简约/疾速启动的个人博客,请直接戳theme-bmw

0. 示例代码

1. 什么是“敕令情势”?

敕令情势是一种数据驱动的设想情势,它属于行动型情势。

  1. 要求以敕令的情势包裹在对象中,并传给挪用对象。
  2. 挪用对象寻觅能够处置惩罚该敕令的适宜的对象,并把该敕令传给响应的对象。
  3. 该对象实行敕令。

在这三步骤中,离别有 3 个差别的主体:发送者、通报者和实行者。在完成过程当中,须要迥殊关注。

2. 运用场景

有时刻须要向某些对象发送要求,然则又不晓得要求的接收者是谁,更不晓得被要求的操纵是什么。此时,敕令情势就是以一种松耦合的体式格局来设想顺序

3. 代码完成

3.1 python3 完成

敕令对象将行动的接收者设置在属性中,而且对外暴露了execute接口(根据习气商定)。

在其他类设置敕令而且实行敕令的时刻,只须要根据商定挪用Command对象的execute()即可。究竟是谁接收敕令,而且怎样实行敕令,都交给Command对象来处置惩罚!

__author__ = 'godbmw.com'

# 接收到敕令,实行详细操纵
class Receiver(object):
  def action(self):
    print("按钮按下,实行操纵")

# 敕令对象
class Command:
  def __init__(self, receiver):
    self.receiver = receiver

  def execute(self):
    self.receiver.action()

# 详细营业类
class Button:
  def __init__(self):
    self.command = None

  # 设置敕令对戏谁人
  def set_command(self, command):
    self.command = command

  # 按下按钮,交给敕令对象挪用相干函数
  def down(self):
    if not self.command:
      return
    self.command.execute()

if __name__ == "__main__":

  receiver = Receiver()

  command = Command(receiver)

  button = Button()
  button.set_command(command)
  button.down()

3.2 ES6 完成

setCommand要领为按钮指定了敕令对象,敕令对象为挪用者(按钮)找到了接收者(MenuBar),而且实行了相干操纵。而按钮自身并不须要体贴接收者和接收操纵

// 接收到敕令,实行相干操纵
const MenuBar = {
  refresh() {
    console.log("革新菜单页面");
  }
};

// 敕令对象,execute要领就是实行相干敕令
const RefreshMenuBarCommand = receiver => {
  return {
    execute() {
      receiver.refresh();
    }
  };
};

// 为按钮对象指定对应的 对象
const setCommand = (button, command) => {
  button.onclick = () => {
    command.execute();
  };
};

let refreshMenuBarCommand = RefreshMenuBarCommand(MenuBar);
let button = document.querySelector("button");
setCommand(button, refreshMenuBarCommand);

下面是同级目次的 html 代码,在谷歌浏览器中翻开建立的index.html,而且翻开控制台,即可看到结果。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>敕令情势</title>
  </head>
  <body>
    <button>按钮</button>
    <script src="./main.js"></script>
  </body>
</html>

4. 参考

    原文作者:心谭
    原文地址: https://segmentfault.com/a/1190000017363752
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞