標(biāo)簽:JS 設(shè)計(jì)模式
讀書(shū)筆記鏈接:
- 《JS設(shè)計(jì)模式》讀書(shū)筆記(一)
- 《JS設(shè)計(jì)模式》讀書(shū)筆記(二)
- 《JS設(shè)計(jì)模式》讀書(shū)筆記(三)
- 《JS設(shè)計(jì)模式》讀書(shū)筆記(五)
- 《JS設(shè)計(jì)模式》讀書(shū)筆記(六)
- 《JS設(shè)計(jì)模式》讀書(shū)筆記(七-完結(jié))
命令模式
分離任務(wù)的請(qǐng)求者與執(zhí)行者(誰(shuí)做和做什么的分離)起宽,由于JS可以傳遞函數(shù),命令模式在JS中是天生存在的绘梦。也因此JS中的命令模式的實(shí)現(xiàn)并不困難
更概括颖御,分離了不變的抽象內(nèi)容與多變的具體內(nèi)容
// 這里抽象定義了請(qǐng)求者何時(shí)請(qǐng)求任務(wù)拧略。
// 但這里也是具體地限定了onclick事件,所以這個(gè)函數(shù)在命令模式中不是必須的禽最。
var setCommand = function(button, command) {
button.onclick = function() {
command.execute();
}
}
// 這里抽象定義了任務(wù)執(zhí)行者要做什么虑乖,
// 這里是必須的帜篇,以后擴(kuò)展只要新增命令類就可以,類似策略模式
var SomeCommand = function(receiver) {
this.receiver = receiver;
}
// execute是約定俗成的
SomeCommand.prototype.execute = function(){
this.receiver.doSomething;
}
// 通上
SomeCommand.prototype.undo = function(){
this.receiver.undoSomething;
}
// 這里選擇具體的任務(wù)執(zhí)行者
receiver = {doSomething: function(){}, undoSomething:function(){}}
var command = new SomeCommand(receiver)
// 這里選擇任務(wù)請(qǐng)求者
setCommand(button, command)
// 也可以直接button.onclick = command.execute;
// 這里是規(guī)定了使用command.execute來(lái)實(shí)現(xiàn)解耦
// 因?yàn)閟etCommand不夠抽象幻锁,所以以后還是會(huì)常變,怎么寫(xiě)都無(wú)所謂了,還是要改啃沪。
組合模式
將多個(gè)對(duì)象組合成一個(gè)大對(duì)象,外部可以將使用單一對(duì)象一樣使用組合對(duì)象
書(shū)中的例子就是利用上一章的命令模式來(lái)介紹組合模式。使用多個(gè)命令組成一個(gè)大的命令。
var Marco