真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

行為型設(shè)計(jì)模式-備忘錄模式詳解-創(chuàng)新互聯(lián)

| 0 基本介紹

備忘錄模式(Memento Pattern):在不破壞封裝性的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。這樣就可以將該對(duì)象恢復(fù)到原先保存的狀態(tài)

成都創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站重做改版、松嶺網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場(chǎng)景定制成都商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為松嶺等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

2 | 0 模式結(jié)構(gòu)

行為型設(shè)計(jì)模式 - 備忘錄模式詳解

Originator(發(fā)起者):記錄當(dāng)前的狀態(tài),負(fù)責(zé)創(chuàng)建和恢復(fù)備忘錄

Memento(備忘錄):負(fù)責(zé)存儲(chǔ)發(fā)起者的狀態(tài),在需要的時(shí)候提供發(fā)起人需要的狀態(tài)

Caretaker(管理者):管理備忘錄

3 | 0 代碼演示

(這里我們以單角色、單狀態(tài)、單備份來演示,思想是相同的,無非是存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)上的區(qū)別)

備忘錄角色,定義了存儲(chǔ)狀態(tài)的變量,可以根據(jù)實(shí)際需求定義對(duì)應(yīng)的存儲(chǔ)對(duì)象

public class Memento {    private String state;    public String getState() {        return state;    }    public void setState(String state) {        this.state = state;    }}

發(fā)起者角色,存儲(chǔ)狀態(tài),并且可以創(chuàng)建備忘錄和將狀態(tài)恢復(fù)為備忘錄的值

public class Originator {    private String state;    public String getState() {        return state;    }    public void setState(String state) {        this.state = state;    }    public Memento createMemento() {        Memento memento = new Memento();        memento.setState(state);        return memento;    }    public void restoreMemento(Memento memento) {        this.state = memento.getState();    }}

管理者角色,管理了備忘錄

public class Caretaker {    private Memento memento;    public Memento getMemento() {        return memento;    }    public void setMemento(Memento memento) {        this.memento = memento;    }}

測(cè)試類

public class Client {    @Test    public void test() {        //設(shè)置初始狀態(tài)        Originator originator = new Originator();        originator.setState("狀態(tài)1");        System.out.println("初始狀態(tài):" + originator.getState());        //創(chuàng)建管理者        Caretaker caretaker = new Caretaker();        caretaker.setMemento(originator.createMemento());        //更新狀態(tài)        originator.setState("狀態(tài)2");        System.out.println("跟新狀態(tài):" + originator.getState());        //恢復(fù)狀態(tài)        originator.restoreMemento(caretaker.getMemento());        System.out.println("恢復(fù)狀態(tài):" + originator.getState());    }}

運(yùn)行結(jié)果

初始狀態(tài):狀態(tài)1跟新狀態(tài):狀態(tài)2恢復(fù)狀態(tài):狀態(tài)1

4 | 0 模式分析

優(yōu)點(diǎn):

  • 給用戶提供了一種可以恢復(fù)狀態(tài)的機(jī)制,使用戶可以比較方便的回退到某個(gè)歷史的狀態(tài)
  • 實(shí)現(xiàn)了信息的封裝,使用戶不需要關(guān)心備忘錄中狀態(tài)的保存細(xì)節(jié)

缺點(diǎn):

  • 在實(shí)際應(yīng)用中,備忘錄模式都是多狀態(tài)和多備份的,發(fā)起人角色的狀態(tài)需要存儲(chǔ)到備忘錄對(duì)象中,對(duì)資源的消耗是比較嚴(yán)重的,為了節(jié)約內(nèi)存,可以配合原型模式使用

應(yīng)用場(chǎng)景:

  • 游戲的存檔
  • CTRL + Z 撤銷
  • 瀏覽器的后退
  • 數(shù)據(jù)庫(kù)的事務(wù)管理
  • ... ...

分享題目:行為型設(shè)計(jì)模式-備忘錄模式詳解-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://weahome.cn/article/ccsojh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部