設計模式(十八)——狀態變化模式-memento

對象模式所屬類別簡介

狀態變化模式包括: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 進行存儲,和恢復。

模式定義

在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。這樣以後就能恢復到之前保存的狀態。

模式結構

在這裏插入圖片描述

要點總結

一個是原始的改變的對象,一個是用來存儲的備忘錄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章