现在的位置: 首页 > 综合 > 正文

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

2012年09月15日 ⁄ 综合 ⁄ 共 1591字 ⁄ 字号 评论关闭
设计模式(21):备忘录模式(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信息还原到前一状态。
     如果在某个系统中使用命令模式时,需要实现命令的撤销功能,那么命令模式可以使用备忘录模式来存储可撤销操作的状态。
     当角色的状态改变时候,有可能这个状态无效,这时候就可以使用暂时存储器起来的备忘录将状态恢复。
 

抱歉!评论已关闭.