青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術博客

感興趣領域:高性能服務器編程,存儲,算法,Linux內核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數據加載中……

常見設計模式的解析和實現(C++)之十九-Memento模式

作用:
在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態.這樣以后就可將該對象恢復到原先保存的狀態.

UML結構圖:


解析:
Memento模式中封裝的是需要保存的狀態,當需要恢復的時候才取出來進行恢復.原理很簡單,實現的時候需要注意一個地方:窄接口和寬接口.所謂的寬接口就是一般意義上的接口,把對外的接口作為public成員;而窄接口反之,把接口作為private成員,而把需要訪問這些接口函數的類作為這個類的友元類,也就是說接口只暴露給了對這些接口感興趣的類,而不是暴露在外部.下面的實現就是窄實現的方法來實現的.

實現:
1)Memento.h
/********************************************************************
????created:????2006/08/09
????filename:?????Memento.h
????author:????????李創
????????????????
http://www.shnenglu.com/converse/

????purpose:????Memento模式的演示代碼
********************************************************************
*/


#ifndef?MEMENTO_H
#define?MEMENTO_H

#include?
<string>

typedef?std::
string?State;

class?Memento;

class?Originator
{
public:
????Originator(
const?State&?rState);
????Originator();
????
~Originator();

????Memento
*????CreateMemento();
????
void????????SetMemento(Memento*?pMemento);
????State????????GetState();
????
void????????SetState(const?State&?rState);
????
void????????RestoreState(Memento*?pMemento);
????
void????????PrintState();

private:
????State????????m_State;
}
;

//?把Memento的接口函數都設置為私有的,而Originator是它的友元,
//?這樣保證了只有Originator可以對其訪問
class?Memento
{
private:
????friend?
class?Originator;
????Memento(
const?State&?rState);
????
void????SetState(const?State&?rState);
????State????GetState();

????State????m_State;
}
;

#endif

2)Memento.cpp
/********************************************************************
????created:????2006/08/09
????filename:?????Memento.cpp
????author:????????李創
????????????????
http://www.shnenglu.com/converse/

????purpose:????Memento模式的演示代碼
********************************************************************
*/


#include?
"Memento.h"
#include?
<iostream>

Originator::Originator()
{

}


Originator::Originator(
const?State&?rState)
????:?m_State(rState)
{

}


Originator::
~Originator()
{

}


State?Originator::GetState()
{
????
return?m_State;
}


void?Originator::SetState(const?State&?rState)
{
????m_State?
=?rState;
}


Memento
*?Originator::CreateMemento()
{
????
return?new?Memento(m_State);
}


void?Originator::RestoreState(Memento*?pMemento)
{
????
if?(NULL?!=?pMemento)
????
{
????????m_State?
=?pMemento->GetState();
????}
????
}


void?Originator::PrintState()
{
????std::cout?
<<?"State?=?"?<<?m_State?<<?std::endl;
}


Memento::Memento(
const?State&?rState)
????:?m_State(rState)
{

}


State?Memento::GetState()
{
????
return?m_State;
}


void?Memento::SetState(const?State&?rState)
{
????m_State?
=?rState;
}


3)Main.cpp
/********************************************************************
????created:????2006/08/09
????filename:?????Main.cpp
????author:????????李創
????????????????
http://www.shnenglu.com/converse/

????purpose:????Memento模式的測試代碼
********************************************************************
*/


#include?
"Memento.h"

int?main()
{
????
//?創建一個原發器
????Originator*?pOriginator?=?new?Originator("old?state");
????pOriginator
->PrintState();

????
//?創建一個備忘錄存放這個原發器的狀態
????Memento?*pMemento?=?pOriginator->CreateMemento();
????
????
//?更改原發器的狀態
????pOriginator->SetState("new?state");
????pOriginator
->PrintState();

????
//?通過備忘錄把原發器的狀態還原到之前的狀態
????pOriginator->RestoreState(pMemento);
????pOriginator
->PrintState();

????delete?pOriginator;
????delete?pMemento;

????
return?0;
}

posted on 2006-08-09 21:41 那誰 閱讀(2476) 評論(0)  編輯 收藏 引用 所屬分類: 設計模式

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲免费观看视频| 免播放器亚洲一区| 亚洲女性裸体视频| 国产亚洲一本大道中文在线| 久久精品夜色噜噜亚洲a∨| 欧美亚洲系列| 亚洲福利视频一区二区| 亚洲欧洲中文日韩久久av乱码| 欧美成人免费在线观看| 在线亚洲欧美视频| 亚洲欧美国产精品专区久久| 国产在线精品一区二区中文| 欧美高清在线视频| 国产精品啊v在线| 久久色在线播放| 欧美区高清在线| 久久福利资源站| 欧美激情在线播放| 久久精品99无色码中文字幕| 麻豆精品一区二区av白丝在线| 日韩午夜剧场| 欧美在线免费一级片| 亚洲国产老妈| 亚洲伊人观看| 亚洲精品在线二区| 欧美在线一区二区| 中文精品在线| 久久午夜电影网| 亚洲欧美日本伦理| 欧美电影免费网站| 久久久久国产一区二区| 欧美日韩成人免费| 女人色偷偷aa久久天堂| 国产精品h在线观看| 欧美肥婆在线| 黄色精品一二区| 亚洲免费一区二区| 亚洲一区二区欧美| 欧美国产一区视频在线观看| 久久久www| ●精品国产综合乱码久久久久| 亚洲国产精品一区制服丝袜| 国产精品都在这里| 亚洲国产岛国毛片在线| 黄色av日韩| 午夜久久福利| 欧美伊人久久久久久久久影院 | 欧美在线视频一区| 欧美视频成人| 亚洲精品日韩综合观看成人91| 黑人一区二区三区四区五区| 亚洲欧美日韩久久精品 | 国产欧美日本在线| 一区二区国产在线观看| 夜夜嗨av一区二区三区免费区| 久久精品在线| 久久男人av资源网站| 国产亚洲精品久久久| 午夜精品福利电影| 欧美一区二区三区在线免费观看| 欧美三日本三级少妇三2023 | 日韩视频免费在线| 在线视频你懂得一区| 欧美激情一区二区| 亚洲精品视频一区| 在线亚洲高清视频| 国产精品国产亚洲精品看不卡15| 亚洲九九九在线观看| 一本大道久久a久久综合婷婷| 欧美精品激情在线| 日韩一二三区视频| 午夜一区不卡| 国内精品久久久久伊人av| 久久精品视频va| 欧美成人午夜剧场免费观看| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美国产乱视频| 日韩亚洲欧美成人| 欧美一区二区观看视频| 黄色精品网站| 欧美乱妇高清无乱码| 在线视频日韩精品| 久久激情综合网| 亚洲国产一区二区三区a毛片| 欧美激情一二区| 亚洲男人的天堂在线| 久久综合中文字幕| 夜夜嗨av色综合久久久综合网| 国产精品久久午夜| 久久久人成影片一区二区三区 | 亚洲已满18点击进入久久| 性色一区二区三区| 亚洲黄色在线观看| 国产精品无码专区在线观看| 久久精品免费看| 99精品福利视频| 久久久久久久久久久久久久一区| 亚洲国产清纯| 国产精品日韩精品欧美精品| 久久久夜精品| 亚洲视频每日更新| 久久只精品国产| 久色婷婷小香蕉久久| 亚洲美女精品一区| 噜噜噜躁狠狠躁狠狠精品视频| 最新亚洲一区| 国产欧美婷婷中文| 欧美日韩mp4| 久久久久久久久伊人| 国产精品99久久久久久久久| 免费视频一区二区三区在线观看| 亚洲欧美日韩电影| 亚洲人成艺术| 在线观看日韩欧美| 国产性猛交xxxx免费看久久| 欧美啪啪成人vr| 老巨人导航500精品| 午夜精品久久久久久久99水蜜桃 | 欧美一区高清| 一区二区三区国产精品| 欧美韩日精品| 久久免费少妇高潮久久精品99| 亚洲私人影院在线观看| 亚洲人成人一区二区三区| 韩国在线一区| 国产欧美日韩在线播放| 国产精品看片你懂得| 欧美日韩国产一级| 欧美肥婆在线| 欧美 日韩 国产 一区| 久久九九精品| 久久久久一区| 久久精品日产第一区二区三区| 亚洲欧美日韩国产另类专区| 一区二区三区视频在线看| 亚洲日本欧美在线| 亚洲国产婷婷香蕉久久久久久| 蜜臀91精品一区二区三区| 久久久久在线观看| 麻豆9191精品国产| 久久躁狠狠躁夜夜爽| 久久一区二区三区国产精品| 久久色中文字幕| 久久免费视频这里只有精品| 久久精品一本| 欧美成人一区二区三区片免费| 久久综合九色99| 欧美va日韩va| 亚洲精品久久视频| 99riav久久精品riav| 亚洲视频在线观看免费| 亚洲淫片在线视频| 久久成人精品无人区| 久久免费视频观看| 欧美成人资源网| 欧美午夜寂寞影院| 国产亚洲精品久久久| 一区在线观看| 99re成人精品视频| 欧美一区二区三区视频在线| 久久久久欧美精品| 亚洲国产精品ⅴa在线观看| 亚洲精品视频啊美女在线直播| 一区二区三区国产在线| 欧美在线免费观看视频| 女同一区二区| 国产伦精品一区二区| 精东粉嫩av免费一区二区三区| 最新成人av在线| 亚洲免费综合| 欧美va亚洲va国产综合| 日韩视频不卡| 久久久久久综合| 欧美视频在线一区二区三区| 国产亚洲va综合人人澡精品| 亚洲人成在线播放网站岛国| 午夜日韩激情| 国产伦精品一区二区| 亚洲人成人一区二区在线观看| 亚洲成人资源| 亚洲欧美精品suv| 欧美国产第一页| 亚洲一区二区在线看| 欧美a级在线| 国产三级欧美三级| 一个色综合av| 欧美成人国产va精品日本一级| 夜夜嗨av一区二区三区网页| 久久久久久久性| 国产精品天天摸av网| 夜久久久久久| 欧美国产一区二区在线观看| 亚洲欧美日韩系列| 欧美亚洲第一区| 亚洲肉体裸体xxxx137| 久久精品亚洲一区| 亚洲尤物视频网| 欧美视频导航| 99www免费人成精品| 女人香蕉久久**毛片精品|