gogo专业大尺度亚洲高清人体,美女张开双腿让男生桶,亚洲av无码一区二区三区鸳鸯影院,久久久久国产精品人妻

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 入門指導 > C語言:備忘錄模式

C語言:備忘錄模式 時間:2019-03-01      來源:華清遠見

備忘錄模式(Memento Pattern)保存一個對象的某個狀態(tài),以便在適當?shù)臅r候恢復對象。備忘錄模式屬于行為型模式。

介紹

所謂備忘錄模式就是在不破壞封裝的前提下,捕獲一個對象的內部狀態(tài),并在該對象之外保存這個狀態(tài),這樣可以在以后將對象恢復到原先保存的狀態(tài)。

備忘錄模式(Memento Pattern)又叫做快照模式(Snapshot Pattern),簡單理解為對當前對象的狀態(tài)進行備份,當使用時將備份釋放,覆蓋指定的對象。

何時使用

很多時候我們總是需要記錄一個對象的內部狀態(tài),這樣做的目的就是為了允許用戶取消不確定或者錯誤的操作,能夠恢復到他原先的狀態(tài),使得他有"后悔藥"可吃。以單機游戲進度的保存為例,當通關進行到某個場景,需要攻略boss的時候,通常會將游戲角色的狀態(tài)存儲起來,如果在boss大戰(zhàn)中失敗了沒用通關,則會進行讀檔操作,利用備忘錄恢復到攻略boss之前的狀態(tài);又或是我們在使用word文檔編輯時,假如有一步操作錯誤想要撤銷時,就會使用word提供的撤銷功能,使編輯恢復到操作之前的狀態(tài)。

設計

那么我們怎么來通過C語言來設計一個備忘錄模式呢?

以文本編輯為例,當我們編輯文檔通常會有一個撤銷功能,在使用撤銷功能時,會有一個相應的撤銷動作。數(shù)據(jù)結構定義兩部分:撤銷的數(shù)據(jù)、恢復的操作。

typedef struct _Action

{

int type;        

struct _Action* next;

void* pData;

void (*process)(void* pData);

}Action;

對應的還需要有創(chuàng)建的函數(shù)和恢復的函數(shù),作為撤銷動作的管理者應該包括

typedef struct _Organizer

{

    int number;

    Action* pActionHead;

 

    Action* (*create)();

    void (*restore)(struct _Organizer* pOrganizer); 

}Organizer;

數(shù)據(jù)恢復

void restore(struct _Organizer* pOrganizer)

{

    Action* pHead;

    assert(NULL != pOrganizer);

 

    pHead = pOrganizer->pActionHead;

    pHead->process(pHead->pData);

    pOrganizer->pActionHead = pHead->next;

    pOrganizer->number --;

    free(pHead);

    return;

}

以上就是備忘錄模式的核心了,實現(xiàn)了備份、撤銷、恢復動作。

備忘錄模式的優(yōu)點和缺點

備忘錄模式的優(yōu)點

1.有時一些發(fā)起人對象的內部信息必須保存在發(fā)起人對象以外的地方,但是必須要由發(fā)起人對象自己讀取,這時,使用備忘錄模式可以把復雜的發(fā)起人內部信息對其他的對象屏蔽起來,從而可以恰當?shù)乇3址庋b的邊界。

2.當發(fā)起人角色的狀態(tài)改變的時候,有可能這個狀態(tài)無效,這時候就可以使用暫時存儲起來的備忘錄將狀態(tài)復原。

備忘錄模式的缺點

1.如果發(fā)起人角色的狀態(tài)需要完整地存儲到備忘錄對象中,那么在資源消耗上面?zhèn)渫泴ο髸馨嘿F。

2.當負責人角色將一個備忘錄存儲起來的時候,負責人可能并不知道這個狀態(tài)會占用多大的存儲空間,從而無法提醒用戶一個操作是否很昂貴。

3.當發(fā)起人角色的狀態(tài)改變的時候,有可能這個協(xié)議無效。如果狀態(tài)改變的成功率不高話,不如采取“假如”協(xié)議模式。

上一篇:嵌入式開發(fā)為什么選擇C語言作為開發(fā)語言?

下一篇:嵌入式開發(fā)要如何學習?有哪些學習方法?

熱點文章推薦
華清學員就業(yè)榜單
高薪學員經(jīng)驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網(wǎng)安備11010802025203號

回到頂部