對象模式所屬類別簡介
狀態變化模式包括:state和memento(備忘錄)。
在組件構建過程中,某些對象的狀態經常面臨變化,如何對這些變化進行有效的管理,又同事維持高層模塊的穩定?
當前模式簡介動機
軟件構建過程中,某些對象狀態轉換過程中,如果想回溯到之前的狀態,又不想暴露實現細節。
需求
一個程序有在每個時候擁有的序列號都是不同的,代表他這個時候的狀態。恢復某個時候的狀態。
設計一
需求更改
設計一更改版本
違反原則
設計二
#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;
class Memeno
{
string m_str;
public:
Memeno(string str):m_str(str) {}
string GetString() { return m_str; }
void SetString(const string &str) { m_str = str; }
};
class Originator
{
string m_state;
public:
Memeno CreatMemeno ()
{
Memeno m(m_state);
return m;
}
void SetMemeno(Memeno &m) {m_state = m.GetString(); }
};
int main()
{
Originator old;
Memeno org = old.CreatMemeno();
//一系列修改-------------------------
old.SetMemeno(org);
return 0;
}
設計二更改版本
設計二比設計一區別
增加一層Originator 進行存儲,和恢復。
模式定義
在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。這樣以後就能恢復到之前保存的狀態。
模式結構
要點總結
一個是原始的改變的對象,一個是用來存儲的備忘錄。