設計模式16 Memento設計模式

2021-06-25 10:28:14 字數 1718 閱讀 3863

memento備忘錄設計模式是乙個儲存另外乙個物件內部狀態拷貝的物件,這樣以後就可以將該物件恢復到以前儲存的狀態。memento備忘錄設計模式的結構如下:

memento備忘錄設計模式有以下3個重要角色:

originator:需要儲存內部狀態的物件。

caretaker:為originator儲存並恢復狀態的物件。

memento:存放originator內部狀態的物件,由originator進行讀寫,並且caretaker進行維護。

memento備忘錄設計模式例子**如下:

//memento

class memeto{

private string state;

public memeto(string state){

this.state = state;

public string getstate(){

return state;

//caretaker

class caretaker{

private stackmementos = new stack();

public void addmemento(memento m){

mementos.push(m);

public memento getmemento(){

if(!mementos.empty()){

return mementos.pop();

return null;

//originator

public class originator{

private string state;

public originator(string state){

this.state = state;

public void setstate(){

this.state = state;

public string getstate(){

return state;

public memnto creatememento(string state){

return new memento(state);

public static void main(string args){

originator originator = new originator("state1");

caretaker caretaker = new caretaker();

caretaker.addmemento(originator.creatememento(originator.getstate()));

originator.setstate("state2");

string restore = caretaker.getmemento().getstate();

system.out.println("current originator state= " + originator.getstate() + ",restore state=" + restore);

程式執行結果:

currentoriginator state  = state2,restore state = state1

memento備忘錄設計模式常用於文字編輯軟體/ide繼承開發環境中的撤銷和恢復操作。

設計模式16 Memento設計模式

memento備忘錄設計模式是乙個儲存另外乙個物件內部狀態拷貝的物件,這樣以後就可以將該物件恢復到以前儲存的狀態。memento備忘錄設計模式的結構如下 memento備忘錄設計模式有以下3個重要角色 originator 需要儲存內部狀態的物件。caretaker 為originator儲存並恢復...

設計模式 備忘錄模式(Memento)

主要目的是儲存乙個物件的某個狀態,以便在適當的時候恢復物件,個人覺得叫備份模式更形象些,通俗的講下 假設有原始類a,a中有各種屬性,a可以決定需要備份的屬性,備忘錄類b是用來儲存a的一些內部狀態,類c呢,就是乙個用來儲存備忘錄的,且只能儲存,不能修改等操作。original類是原始類,裡面有需要儲存...

設計模式(十八) 狀態變化模式 memento

狀態變化模式包括 state和memento 備忘錄 在元件構建過程中,某些物件的狀態經常面臨變化,如何對這些變化進行有效的管理,又同事維持高層模組的穩定?軟體構建過程中,某些物件狀態轉換過程中,如果想回溯到之前的狀態,又不想暴露實現細節。乙個程式有在每個時候擁有的序列號都是不同的,代表他這個時候的...