JavaMementoPattern(備忘錄模式)
備忘錄模式(Memento Pattern)儲存一個物件的某個狀態,以便在適當的時候恢復物件。備忘錄模式屬於行為型模式。
關鍵程式碼:客戶不與備忘錄類耦合,與備忘錄管理類耦合。
優點: 1、給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態。 2、實現了資訊的封裝,使得使用者不需要關心狀態的儲存細節。
缺點:消耗資源。如果類的成員變數過多,勢必會佔用比較大的資源,而且每一次儲存都會消耗一定的記憶體。
注意事項: 1、為了符合迪米特原則,還要增加一個管理備忘錄的類。 2、為了節約記憶體,可使用原型模式+備忘錄模式。
- 建立 Memento 類。
/**
* 1. 建立Memento類。
* @author mazaiting
*
*/
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
- 建立 Originator 類。
/**
* 2. 建立 Originator 類。
* @author mazaiting
*/
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento saveStateToMemento(){
return new Memento(state);
}
public void getStateFromMemento(Memento memento){
state = memento.getState();
}
}
- 建立 CareTaker 類。
/**
* 3. 建立 CareTaker 類。
* @author mazaiting
*/
public class CareTaker {
private List<Memento> mementos = new ArrayList<Memento>();
/**
* 新增
*/
public void add(Memento memento) {
mementos.add(memento);
}
/**
* 獲取Memento
*/
public Memento get(int index){
return mementos.get(index);
}
}
- 使用 CareTaker 和 Originator 物件。
/**
* 4. 使用 CareTaker 和 Originator 物件。
* @author mazaiting
*
*/
public class Client {
public static void main(String[] args) {
Originator originator = new Originator();
CareTaker 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");
System.out.println("Current State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println("First saved State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(1));
System.out.println("Second saved State: " + originator.getState());
}
}
- 列印結果
Current State: State #4
First saved State: State #2
Second saved State: State #3
相關文章
- 備忘錄模式(Memento)模式
- 設計模式----備忘錄模式設計模式
- 19_備忘錄模式模式
- 行為型模式:備忘錄模式模式
- 設計模式 - 備忘錄模式 ( Memento )設計模式
- 設計模式之備忘錄模式設計模式
- Android備忘錄《單例模式》Android單例模式
- 第 22 章 備忘錄模式模式
- 實驗 20:備忘錄模式模式
- 簡說設計模式——備忘錄模式設計模式
- 極簡設計模式-備忘錄模式設計模式
- GoLang設計模式11 - 備忘錄模式Golang設計模式
- 11.21實驗 20:備忘錄模式模式
- 設計模式漫談之備忘錄模式設計模式
- 設計模式 | 備忘錄模式及典型應用設計模式
- 折騰Java設計模式之備忘錄模式Java設計模式
- 19.java設計模式之備忘錄模式Java設計模式
- Android原始碼分析之備忘錄模式Android原始碼模式
- 備忘錄設計模式知識概括設計模式
- 備忘錄
- 【備忘錄】
- 行為型設計模式 - 備忘錄模式詳解設計模式
- Rust語言之GoF設計模式:備忘錄Memento模式RustGo設計模式
- 抽絲剝繭——備忘錄設計模式設計模式
- Eigen備忘錄
- Python 備忘錄Python
- RabbitMQ備忘錄MQ
- 設計模式(Swift) - 2.單例模式、備忘錄模式和策略模式設計模式Swift單例
- 無廢話設計模式(16)行為型模式--備忘錄模式設計模式
- 軟體設計模式學習(二十二)備忘錄模式設計模式
- Swift 中的設計模式 #2 觀察者模式與備忘錄模式Swift設計模式
- linux 備忘記錄Linux
- Java備忘錄《集合》Java
- 網站備忘錄網站
- 設計模式學習筆記(十八)備忘錄模式及其實現設計模式筆記
- Java進階篇設計模式之十二 ---- 備忘錄模式和狀態模式Java設計模式
- 設計模式 第十章 備忘錄模式、直譯器模式、狀態模式設計模式
- Java備忘錄《“==” 和 “equals”》Java
- Dart 學習備忘錄Dart