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

那誰的技術博客

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

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

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

UML結構圖:


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

實現:
1)Memento.h
/********************************************************************
????created:????2006/08/09
????filename:?????Memento.h
????author:????????李創
????????????????
http://m.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://m.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://m.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>
            国产精品国产精品| 午夜宅男欧美| 欧美日产一区二区三区在线观看| 久久免费观看视频| 乱人伦精品视频在线观看| 久久综合狠狠综合久久综合88 | 裸体一区二区| 亚洲福利视频网| 欧美激情影音先锋| 亚洲毛片在线看| 亚洲免费影视| 玖玖国产精品视频| 亚洲欧美日韩一区二区三区在线观看 | 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲乱码久久| 亚洲一区二区三区精品在线观看| 午夜精品福利一区二区蜜股av| 久久精品亚洲精品国产欧美kt∨| 免费成人美女女| 日韩视频一区二区三区在线播放| 亚洲欧美国产日韩中文字幕| 免费一级欧美片在线观看| 欧美日韩国产成人精品| 国产在线观看精品一区二区三区| 亚洲黄色免费电影| 欧美一二三区在线观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 美国三级日本三级久久99| 欧美日韩在线观看视频| 黑人极品videos精品欧美裸| 99精品欧美| 国产精品视频999| 一区二区自拍| 午夜精品一区二区三区四区| 免费不卡视频| 午夜宅男久久久| 欧美日韩1234| 91久久在线| 久久久水蜜桃av免费网站| 一本到12不卡视频在线dvd| 猛男gaygay欧美视频| 国产目拍亚洲精品99久久精品| 亚洲激情自拍| 免费观看一区| 欧美在线观看www| 国产九九精品| 国产一区二区高清不卡| 久久久亚洲人| 国产亚洲亚洲| 9久草视频在线视频精品| 亚洲嫩草精品久久| 亚洲精品裸体| av72成人在线| 欧美日本亚洲视频| 亚洲黄色成人久久久| 久久综合久久美利坚合众国| 亚洲欧洲av一区二区| 国产精品你懂得| 一区二区三区久久网| 欧美大色视频| 欧美成人69av| 99re在线精品| 一本色道久久综合亚洲91| 欧美另类videos死尸| 一区二区三区高清在线| 亚洲欧洲偷拍精品| 亚洲一区二区三区高清| 国产精品高潮久久| 亚洲欧美激情四射在线日 | 一区二区毛片| 99精品免费| 国产精品免费视频观看| 欧美一区日本一区韩国一区| 亚洲欧美一区在线| 激情成人在线视频| 久久亚洲欧美| 女主播福利一区| 一本大道久久a久久精品综合| 亚洲精品国产精品久久清纯直播| 欧美日韩在线播| 欧美在线观看日本一区| 久久精品国产清高在天天线| 亚洲欧洲综合另类在线| 亚洲国产一区二区三区青草影视| 欧美金8天国| 欧美一区二区三区播放老司机| 午夜精品影院| 亚洲精品之草原avav久久| 一二三四社区欧美黄| 国产亚洲欧美一区二区三区| 亚洲精品国产精品乱码不99 | 亚洲国产一区二区三区高清| 亚洲日本成人在线观看| 国产精品网曝门| 噜噜噜噜噜久久久久久91| 欧美激情第二页| 亚洲欧美视频| 久久精品理论片| 一区二区三区四区五区精品| 亚洲女同在线| 亚洲精品免费看| 欧美一区二区三区四区在线观看地址 | 亚洲国产精品va在线看黑人| 在线视频亚洲一区| 经典三级久久| 亚洲最新视频在线播放| 亚洲电影观看| 亚洲与欧洲av电影| 99视频在线精品国自产拍免费观看 | 国产欧美一区二区精品婷婷| 欧美激情国产日韩精品一区18| 国产精品av久久久久久麻豆网| 美女视频黄a大片欧美| 国产精品成人观看视频免费| 欧美xx视频| 国产一区激情| 亚洲天堂av在线免费| 99精品国产在热久久下载| 久久久青草婷婷精品综合日韩| 亚洲一区二区三区四区在线观看 | 亚洲人成网站精品片在线观看| 亚洲女爱视频在线| 亚洲深夜福利网站| 欧美激情综合网| 免费亚洲一区二区| 韩国女主播一区二区三区| 正在播放欧美一区| 在线一区二区三区四区| 欧美精品日韩三级| 亚洲高清av在线| 91久久久久久| 久久久久综合网| 久久一区精品| 精品成人一区二区三区四区| 亚洲欧美日韩国产另类专区| 午夜精品久久久久久| 欧美性猛交视频| 西西人体一区二区| 国产女主播一区二区三区| 午夜天堂精品久久久久| 欧美精品一区二区三区蜜桃| 亚洲大胆女人| 最新亚洲激情| 欧美jizzhd精品欧美巨大免费| 蜜臀久久久99精品久久久久久| 激情五月***国产精品| 久久国产精品久久国产精品| 久久一二三四| 在线看日韩欧美| 欧美黄色日本| 一区二区三区精品国产| 亚洲综合色自拍一区| 国产日韩一区| 久久久久一区二区三区四区| 亚洲成人在线视频播放 | 国产精品嫩草99a| 亚欧成人精品| 老色批av在线精品| 91久久精品美女高潮| 欧美日韩精品| 亚洲与欧洲av电影| 欧美va天堂va视频va在线| 亚洲精品久久久久久久久久久久久| 欧美大色视频| 亚洲综合电影一区二区三区| 久久久久一区二区三区四区| 亚洲国产精品一区| 国产精品久久一卡二卡| 久久国产欧美日韩精品| 亚洲精品视频一区| 久久国产精品网站| 日韩视频在线观看| 国产精品丝袜xxxxxxx| 久久久久成人网| 一本色道久久综合亚洲精品小说| 欧美专区在线播放| 亚洲精品国产精品乱码不99按摩 | 一区二区欧美精品| 国产精品丝袜白浆摸在线| 久久天堂成人| 亚洲综合第一| 亚洲人成人一区二区三区| 久久av在线| 在线亚洲精品福利网址导航| 狠狠久久婷婷| 国产精品视频999| 欧美 日韩 国产 一区| 亚洲欧美日韩在线| 亚洲日本无吗高清不卡| 久久久久久久精| 亚洲欧美视频一区二区三区| 最新亚洲一区| 一区在线影院| 国产精品免费一区二区三区在线观看 | 亚洲私人影吧| 在线观看日韩av| 国产精品女主播| 欧美人与禽猛交乱配视频| 久久精品国产99| 亚洲欧美日韩一区二区三区在线|