### 備忘錄模式
在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。這樣以后就可將這個對象恢復到原先保存的狀態。(摘抄)
備忘錄模式可以就用平時備忘東西的過程來理解,首先你要備忘,必須要知道備忘什么東西,這時就可以把備忘的東西抽出來當一個類Memento,然后你要有一個產生備忘的類,是誰要備忘Originator,最后備忘的東西放在哪,需要的時候去哪里取出來Caretaker。
~~~
//備忘錄類
public class Memento
{
private String state;
public Memento(String state)
{
this.state = state;
}
public String getState()
{
return state;
}
}
//生成備忘錄的類
public class Originator
{
private String state;
public void setState(String state)
{
this.state = state;
}
public void printState()
{
System.out.println(state);
}
public Memento createMemento()
{
return new Memento(state);
}
public void setMemento(Memento memento)
{
state = memento.getState();
}
}
//存儲備忘錄的類
public class Save
{
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
class client
{
public static void main()
{
Originator originator = new Originator();
originator.setState("start");
originator.printState();
//保存狀態
Save save = new Save();
save.setMemento(originator.createMemento());
originator.setState("stop");
originator.printState();
//恢復狀態
originator.setMemento(save.getMemento());
originator.printState();
}
}
~~~
要保存的細節全部都封裝在Memento類里面了,如果需要改變保存的細節,那么也和客戶端沒有關系。這就是備忘錄模式最大的好處,例如你一開始想保存A屬性,但是后來又想保存B屬性,這個時候只需要改動Originator和Memento,客戶端完全是可以繼續用的。
Memento模式比較適合用于功能比較復雜的,但需要維護或記錄屬性歷史的類,或者需要保存屬性只是眾多屬性中的一小部分時,Originator可以根據保存的Memento信息還原到前一個狀態。(摘抄)
- 前言
- (1)代碼無錯就是優?——簡單工廠模式
- (2)商場促銷——策略模式
- (3)&(4)&(5) 設計模式原則
- (6)穿什么有這么重要?——裝飾模式
- (7)為別人做嫁衣——代理模式
- (8)雷鋒依然在人間——工廠方法模式
- (9)簡歷復印——原型模式
- (10)考題抄錯會做也白搭——模板方法模式
- (11)迪米特法則
- (12)牛市股票還會虧錢?—— 外觀模式
- (13)好菜每回味不同——建造者模式
- (14)老板回來,我不知道——觀察者模式
- java實現事件委托
- (15)就不能不還DB嗎?—— 抽象工廠模式
- (16)無盡加班何時休息——狀態模式
- (17)在NBA我需要翻譯——適配器模式
- (18)如果再回到從前——備忘錄模式
- (19)分公司=部門——組合設計模式
- (20)想走?可以!先買票——迭代器模式
- (21)有些類也需計劃生育——單例模式
- (22)手機軟件何時統一——橋接模式
- (23)烤羊肉串引來的思考——命令模式
- (24)加薪非要老總批?——職責鏈模式
- (25)世界需要和平——中介者模式
- (26)項目多也別傻做——享元模式
- (28)男人和女人——訪問者模式