設(shè)計模式二十--備忘錄模式

定義

在不破壞封裝性的前提下废酷,捕獲一個對象的內(nèi)部狀態(tài)错邦,并在該對象之外保存這個狀態(tài)垂谢,這樣,以后就可以將該對象復(fù)原成原來保存的狀態(tài)牍陌。

備忘錄模式的角色

1:發(fā)起人角色(Originator)該角色記錄當(dāng)前對象的內(nèi)部狀態(tài)擎浴。負(fù)責(zé)定義哪些屬于備份范圍內(nèi)的狀態(tài),負(fù)責(zé)創(chuàng)建 和恢復(fù)備忘數(shù)據(jù)毒涧。

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

2:備忘錄角色(Memento)
該角色負(fù)責(zé)存儲發(fā)起人角色的內(nèi)部狀態(tài)贮预,在需要時提供發(fā)起人需要的內(nèi)部狀態(tài)數(shù)據(jù)。

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

3:負(fù)責(zé)人(Caretaker)
該角色對備忘錄進(jìn)行管理契讲,保存和提供備忘錄仿吞。

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

客戶端代碼:

public class Client{
  Originator org = new Originator();
  Caretaker care = new Caretaker();
  //創(chuàng)建一個備忘錄
  Memento  memento = care.setMemento(org.createMemento());
  //恢復(fù)一個備忘錄
  org.restore(care.getMemento());
}

注意事項(xiàng)

1:備忘錄的生命周期,應(yīng)該在最近的代碼中使用捡偏,要主動管理生命周期唤冈。
2:備忘錄的性能,不能再循環(huán)中頻繁創(chuàng)建備忘錄银伟,負(fù)責(zé)會提升系統(tǒng)開銷你虹。

使用場景

1:需要保存和恢復(fù)數(shù)據(jù)的狀態(tài)。
2:提供一個可回滾的操作彤避。
3:需要監(jiān)控副本的場景傅物。
4:數(shù)據(jù)庫連接的事務(wù)管理模式就是備忘錄模式

參考資料:設(shè)計模式(java)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市琉预,隨后出現(xiàn)的幾起案子董饰,更是在濱河造成了極大的恐慌,老刑警劉巖圆米,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卒暂,死亡現(xiàn)場離奇詭異,居然都是意外死亡娄帖,警方通過查閱死者的電腦和手機(jī)也祠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來块茁,“玉大人齿坷,你說我怎么就攤上這事∈福” “怎么了永淌?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長佩耳。 經(jīng)常有香客問我遂蛀,道長,這世上最難降的妖魔是什么干厚? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任李滴,我火速辦了婚禮,結(jié)果婚禮上蛮瞄,老公的妹妹穿的比我還像新娘所坯。我一直安慰自己,他們只是感情好挂捅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布芹助。 她就那樣靜靜地躺著,像睡著了一般闲先。 火紅的嫁衣襯著肌膚如雪状土。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天伺糠,我揣著相機(jī)與錄音蒙谓,去河邊找鬼。 笑死训桶,一個胖子當(dāng)著我的面吹牛累驮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渊迁,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慰照,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了琉朽?” 一聲冷哼從身側(cè)響起毒租,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎箱叁,沒想到半個月后墅垮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耕漱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年算色,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片螟够。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡灾梦,死狀恐怖峡钓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情若河,我是刑警寧澤能岩,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站萧福,受9級特大地震影響拉鹃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鲫忍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一膏燕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧悟民,春花似錦坝辫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸦泳,卻和暖如春银锻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背做鹰。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工击纬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钾麸。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓更振,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饭尝。 傳聞我的和親對象是個殘疾皇子肯腕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容