<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
命令設計模式是由三部分構成:
把執行操作和稍後執行事件資訊存在命令物件中,通過發令者釋出命令來讓執行者進行執行,從而達到了執行者和發令者分離開來,使程式碼耦合度降低
在生活中,我們去飯館吃飯,我們先告訴服務員我們想要吃那些菜以及對菜品的要求,然後服務員通過點餐平臺告知後面的廚房,廚房得知我們想要吃的菜以及對菜品的要求,廚師對菜品進行製作,做好後通知服務員,服務員把菜品給我們端上來,我們進行享用
生活中例子上,發令者就是我們,執行者是服務員,廚師製作菜品則是命令物件
在工作中我們通常用於某些時候需要向某些物件發起請求,但並不知道接收者是誰,也不知道請求的操作是什麼,此時可以使用命令設計模式
我們來做一個需求,該需求是能夠一鍵封鎖賬戶許可權和一鍵解封賬戶許可權
頁面結構,寫上倆個許可權按鈕進行控制許可權開啟與關閉
<button id="onbtn">開啟許可權</button> <button id="offbtn">關閉許可權</button>
我們在通過js進行過去到倆個許可權控制按鈕
const onBtn=document.getElementById('onbtn'); const offBtn=document.getElementById('offbtn');
class Control { submit(command) { command.execute(); } }
class Power { powerOn() { console.log("開啟所有許可權入口"); } powerOff() { console.log("關閉所有許可權入口"); } }
命令物件:
class PowerOnCommand { constructor(current) { this.current = current; } execute() { this.current.powerOn(); } undo() { this.current.powerOff(); } redo() { this.execute(); } } class PowerOffCommand { constructor(current) { this.current = current; } execute() { this.current.powerOff(); } undo() { this.current.powerOn(); } redo() { this.execute(); } }
我們把各個類都建立好範例,然後再通過js給按鈕繫結上事件,通過事件操作命令者範例進行釋出命令
//執行者範例 const power = new Power(); //命令物件範例 const powerOn = new PowerOnCommand(power); const powerOff = new PowerOffCommand(power); //釋出者範例 const control = new Control(); //開啟許可權按鈕繫結事件 onBtn.onclick=function(){ // 開啟所有許可權入口 control.submit(powerOn); alert('許可權已開啟') } //關閉許可權按鈕繫結事件 offBtn.onclick=function(){ // 關閉所有許可權入口 control.submit(powerOff); alert('許可權已關閉') }
命令者設計模式由於允許我們將操作封裝在物件中進行管理,所以也可以用來實現事務系統,將執行的命令儲存在歷史記錄中,如果成功則執行最後的命令,否則根據歷史記錄進行回滾,對執行的操作進行復原
到此這篇關於JavaScript設計模式之命令模式的文章就介紹到這了,更多相關JavaScript 命令模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45