作者按:《天天一个设想情势》旨在开端体会设想情势的精华,现在采纳
javascript
和
python
两种言语完成。固然,每种设想情势都有多种完成体式格局,但此小册只纪录最直接了当的完成体式格局 :)
原文地点是:《天天一个设想情势之敕令情势》
迎接关注个人手艺博客:godbmw.com。每周 1 篇原创手艺分享!开源教程(webpack、设想情势)、口试刷题(偏前端)、学问整顿(每周细碎),迎接历久关注!
假如您也想举行学问整顿 + 搭建功用完美/设想简约/疾速启动的个人博客,请直接戳theme-bmw
0. 示例代码
1. 什么是“敕令情势”?
敕令情势是一种数据驱动的设想情势,它属于行动型情势。
- 要求以敕令的情势包裹在对象中,并传给挪用对象。
- 挪用对象寻觅能够处置惩罚该敕令的适宜的对象,并把该敕令传给响应的对象。
- 该对象实行敕令。
在这三步骤中,离别有 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. 参考
- 《JavaScript 设想情势和开辟实践》
- 怎样完成敕令情势