积木

No sub title

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

常用链接

留言簿(1)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

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;
};

posted on 2011-06-28 10:02 Jacc.Kim 阅读(314) 评论(0)  编辑 收藏 引用 所属分类: 设计模式

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理