《設計模式》學習筆記 備忘錄模式

2021-08-30 08:17:23 字數 1781 閱讀 8108

備忘錄模式(memento pattern)儲存乙個物件的某個狀態,以便在適當的時候恢復物件。備忘錄模式屬於行為型模式。

意圖:

在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。

主要解決:

所謂備忘錄模式就是在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。

這樣可以在以後將物件恢復到原先儲存的狀態。

何時使用:

很多時候我們總是需要記錄乙個物件的內部狀態,這樣做的目的就是為了允許使用者取消不確定或者錯誤的操作。

能夠恢復到他原先的狀態,使得他有"後悔藥"可吃。

如何解決:

通過乙個備忘錄類專門儲存物件狀態。

關鍵**:

客戶不與備忘錄類耦合,與備忘錄管理類耦合。    

應用例項:

1、後悔藥。 

2、打遊戲時的存檔。

3、windows 裡的 ctri + z。 

4、ie 中的後退。 

4、資料庫的事務管理。

優點:

1、給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態。

2、實現了資訊的封裝,使得使用者不需要關心狀態的儲存細節。

缺點:消耗資源。如果類的成員變數過多,勢必會占用比較大的資源,而且每一次儲存都會消耗一定的記憶體。

使用場景:

1、為了符合迪公尺特原則,還要增加乙個管理備忘錄的類。 

2、為了節約記憶體,可使用原型模式+備忘錄模式。

#pragma once

#include#include// 備忘錄

class mementopattern

mementopattern(std::string name, int age) :m_name(name), m_age(age) {}

~mementopattern() {}

void setname(std::string name)

void setage(int age)

std::string getname(void)

int getage(void)

private:

std::string m_name;

int m_age;

};//人

class person

person(std::string name, int age) :m_name(name), m_age(age)

~person() {}

void setname(std::string name)

void setage(int age)

std::string getname(void)

int getage(void)

// 建立備忘錄

mementopattern* creatmemento(void)

// 從備忘錄恢復

void replymemento(void)

// 過載乙個版本

void replymemento(mementopattern* mementopattern)

void printinf(void)

int maintest2(void)

int main(void)

設計模式學習筆記 備忘錄模式

定義 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可以將該物件恢復到原先儲存的狀態。備忘錄模式主要是對某個物件的狀態的備份,備份的主要是物件當前的屬性值,即成員變數的值,成員變數可以有多個,而且可以備份同乙個物件的多種不同狀態,即同乙個物件可以同時有多個備份...

設計模式筆記 備忘錄模式

在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,便於將該物件恢復到原先儲存的狀態。originator 發起人角色 記錄當前時刻的內部狀態,負責定義哪些屬於備份範圍的狀態,負責建立和恢復被萬福路資料 public class originator public void ...

設計模式學習 備忘錄模式

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