设计模式——备忘录模式(Memento)

设计模式(21):备忘录模式(Memento)
 
备忘录模式(Memento)
 
定义
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
备忘录模式(Memento)结构图
设计模式——备忘录模式(Memento)
发起人(Originator)类
    class  Originator
    {
        
private   string  state;
        
public   string  State
        {
            
get  {  return  state; }
            
set  { state  =  value; }
        }
        
public  Memento CreateMemento()
        {
            
return  ( new  Memento(state));
        }
        
public   void  SetMemento(Memento memento)
        {
            state 
=  memento.State;
        }
        
public   void  show()
        {
            Console.WriteLine(
" state= " + state);
        }
    }
 
备忘录(Memento)类
     class  Memento
    {
        
private   string  state;
        
public  Memento( string  state)
        {
            
this .state  =  state;
        }
        
public   string  State
        {
            
get  {  return  state; }
        }
    }
 
管理者(Caretaker)类
     class  Caretaker
    {
        
private  Memento memento
        {
            
get  {  return  memento; }
            
set  { memento  =  value; }
        }
    }
 
客户端程序
         static   void  Main( string [] args)
        {
            Originator o 
=   new  Originator();
            o.State 
=   " On " ;
            o.show();

            Caretaker c 
=   new  Caretaker();
            c.memento 
=  o.CreateMemento();
            o.State 
=   " Off " ;
            o.show();
            o.SetMemento(c.memento);
            o.show();
        }
 
备忘录的好处:
      把要保存的细节给封装在了Memento中,哪一天要改保存的细节也不用影响客户端了.
      Mememto模式比较适用于功较复杂,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态。
     如果在某个系统中使用命令模式时,需要实现命令的撤销功能,那么命令模式可以使用备忘录模式来存储可撤销操作的状态。
     当角色的状态改变时候,有可能这个状态无效,这时候就可以使用暂时存储器起来的备忘录将状态恢复。
 

你可能感兴趣的:(备忘录模式)