這篇文章主要講解了如何使用javascript中的備忘錄模式,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。
10年積累的成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有平利免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
介紹:在我們的開(kāi)發(fā)中偶爾會(huì)遇到這樣一種情況,需要對(duì)用戶(hù)的行為進(jìn)行撤銷(xiāo)。要想實(shí)現(xiàn)撤銷(xiāo),首先需要保存軟件系統(tǒng)的歷史狀態(tài),當(dāng)用戶(hù)執(zhí)行撤銷(xiāo)時(shí)用之前的狀態(tài)覆蓋當(dāng)前狀態(tài)。本節(jié)介紹的備忘錄模式提供了一種狀態(tài)恢復(fù)的實(shí)現(xiàn)機(jī)制,使得用戶(hù)可以方便的回到一個(gè)特定的歷史步驟。
定義:在不破壞封裝的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài),這樣可以在以后將對(duì)象恢復(fù)到原先保存的狀態(tài),它是一種對(duì)象行為模式,其別名為T(mén)oken。
場(chǎng)景:使用js實(shí)現(xiàn)一個(gè)簡(jiǎn)單的狀態(tài)機(jī),用于狀態(tài)的保存,回退。實(shí)現(xiàn)下備忘錄模式。
示例:
var Memento = function(state){ var _state = state; this.getState = function(){ return _state; } } var Originator = function(){ var _state; this.setState = function(state){ _state = state; } this.getState = function(){ return _state; } this.saveStateToMemento = function(){ return new Memento(_state) } this.getStateFromMemento = function(memento){ _state = memento.getState(); } } var CareTaker = function(){ var _mementoList = []; this.add = function(memento){ _mementoList.push(memento); } this.get = function(index){ return _mementoList[index]; } } var originator = new Originator(); var careTaker = new CareTaker(); originator.setState("State 1"); originator.setState("State 2"); careTaker.add(originator.saveStateToMemento()); originator.setState("State 3"); careTaker.add(originator.saveStateToMemento()); originator.setState("State 4"); console.log("當(dāng)前狀態(tài): " + originator.getState()); // 當(dāng)前狀態(tài): State 4 originator.getStateFromMemento(careTaker.get(0)); console.log("恢復(fù)第一次保存狀態(tài): " + originator.getState()); // 恢復(fù)第一次保存狀態(tài): State 2 originator.getStateFromMemento(careTaker.get(1)); console.log("恢復(fù)第二次保存: " + originator.getState()); // 恢復(fù)第二次保存: State 3
這個(gè)例子里面Originator稱(chēng)為原發(fā)器,可以通過(guò)saveStateToMemento創(chuàng)建一個(gè)備忘錄,存儲(chǔ)當(dāng)前狀態(tài)。Memento是一個(gè)備忘錄對(duì)象,只供原發(fā)器使用,提供狀態(tài)提取方法。CareTaker稱(chēng)之為負(fù)責(zé)人也可以叫管理者,它負(fù)責(zé)保存?zhèn)渫洠遣荒軐?duì)備忘錄內(nèi)容進(jìn)行操作或檢查
備忘錄模式總結(jié):
優(yōu)點(diǎn):
* 提供了一種狀態(tài)恢復(fù)的時(shí)間機(jī)制,使得用戶(hù)可以方便的回退到一個(gè)特定的歷史步驟。
* 備忘錄實(shí)現(xiàn)了對(duì)信息的封裝,一個(gè)備忘錄對(duì)象是一種原發(fā)器對(duì)象狀態(tài)的表示,不會(huì)被其他代碼所改動(dòng)。
缺點(diǎn):
* 備忘錄模式的主要缺點(diǎn)是資源消耗過(guò)大,如果需要保存的原發(fā)器類(lèi)的成員變量太多,就不可避免的需要占用大量的存儲(chǔ)空間。
適用場(chǎng)景:
* 保存一個(gè)對(duì)象在某一時(shí)刻的全部或部分狀態(tài)
看完上述內(nèi)容,是不是對(duì)如何使用javascript中的備忘錄模式有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
新聞名稱(chēng):如何使用javascript中的備忘錄模式
文章位置:http://m.2m8n56k.cn/article20/jgesco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、品牌網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、域名注冊(cè)、移動(dòng)網(wǎng)站建設(shè)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷(xiāo)型網(wǎng)站建設(shè)知識(shí)