備忘錄模式

2021-07-12 07:16:14 字數 1944 閱讀 9717

備忘錄模式:在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。 這樣以後就可將該物件恢復到原來的狀態。

備忘錄基本**:

根據結構圖可以簡單分為三類:

發起人: origiantor

備忘錄: memento

管理者: caretaker

**:

//發起人

public

class originator

//建立備忘錄,將當前需要儲存的資訊匯入並例項化出乙個memento物件

public memento creatememento()

//恢復備忘錄,將memento匯入並將相關資料恢復

public

void

setmemento(memento m)

//顯示資料

public

void

show()

}//備忘錄

public

class memento

}public

memento(string state)

}//管理者

public

class caretaker

}

在main方法中呼叫:

static void main(string args)

該模式的好處:把儲存的細節給封裝在了memento中了,哪一天要是在更改儲存的細節也不用影響客戶端了

使用場合 :memento模式比較適用於功能比較複雜,但需要維護或記錄屬性歷史的類,或者需要儲存的屬性只是眾多屬性的一小部分時,originator可以根據儲存的memento資訊還原到前乙個狀態

使用備忘錄可以把複雜的物件內部資訊對其他的物件遮蔽起來

接下來,我們練習一道題:

大家平常在玩遊戲的時候,都會在打boss之前儲存一下,以防失敗後再重新來過。

分析: 既然是遊戲,則會有 生命值 、攻擊力、防禦力、 還有打boss的行為和儲存狀態的行為。

原始碼:

//發起類

public

class gamerole

//攻擊力

public

int attack

//防禦力

public

int defense

//建立備忘錄

public gamememento creatememento()

//大戰boss

public

void

fight()

//恢復備忘錄

public

void

setmemento(gamememento m)

//展示

public

void

show()

",vit);

console.writeline("當前攻擊力:", attack);

console.writeline("當前防禦力:", defense);}}

//遊戲備錄類

public

class gamememento

public

int vit

}public

int attack

}public

int defense }}

//遊戲管理者

public

class gamecaretaker

}

在main方法中呼叫的情況:

static void main(string args)

備忘錄模式

備忘錄模式 memento 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可以使用備忘錄恢復內部狀態。originator可根據需要...

備忘錄模式

先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...

備忘錄模式

面臨問題 物件狀態的變化無端,如何回溯恢復物件在某個點的狀態?在軟體構建過程中,某些物件的狀態在轉換過程中,可能由於某種需要,要求程式能夠回溯到物件之前處於某個點時的狀態。如果使用一些公用介面來讓其他物件得到物件的狀態,便會暴露物件的細節實現。如何實現物件狀態的良好儲存與恢復?但同時又不會因此而破壞...