Memento模式
该模式的出现,主要是为了让用户拥有“撤销”的操作。好给用户有个恢复先前状态的权力。其主要思想就是将对象(假设其类型为:ClassA)的先前状态记录起来(当然自己得管理好)。在需要时,用此恢复。根据此思路,当然实现方法就多种多样。下面参考设计模式资料中的c++代码。(觉得此代码设计还是挺有道理的。因为对Memento类来说,除了ClassA的对象外,其他类型的对象都不需要,且也不应该能访问到。因此,在具体实现上,它用了友元的技术)。
typedef std::string State;
class COperationsMemento
{
//其实更强的,可以将该类设计成。可以维护一组状态的。这样,就可以支持
//任意恢复到先前的第N种状态。就好似photoshop的层的那样的撤销。
//为说明思想,此暂时只维护一个状态。
private:
State GetState(void)
{
return this->_sta;
}
void SetState(const State& state)
{
this->_sta = state;
}
// some code here
private:
State _sta;
};
class COperationSteps
{
public:
friend class COperationsMemento;
COperationSteps()
{
this->m_pMemento = NULL;
this->_sta = "normal";
}
COperationSteps(COperationsMemento* pMemento)
{
this->m_pMemento = pMemento;
this->_sta = "normal";
}
virtual ~COperationSteps()
{
if (m_pMemento != NULL)
{
delete m_pMemento;
m_pMemento = NULL;
}
}
//存储状态(即:保存状态)
void SaveState(void)
{
if (m_pMemento == NULL)
{
m_pMemento = new COperationsMemento();
}
m_pMemento->SetState(this->_sta);
}
//恢复状态
void RestoreState(COperationsMemento* pMemento = NULL)
{
if (pMemento != NULL)
{
this->_sta = pMemento->GetState();
}
else
{
this->_sta = m_pMemento->GetState();
}
}
private:
COperationsMemento* m_pMemento; //需要维护,因为该状态,是自己私有的
State _sta;
};