对象模式所属类别简介
状态变化模式包括: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 进行存储,和恢复。
模式定义
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就能恢复到之前保存的状态。
模式结构
要点总结
一个是原始的改变的对象,一个是用来存储的备忘录。