首页 > 其他 > 详细

备忘录模式

时间:2020-07-01 18:13:26      阅读:51      评论:0      收藏:0      [点我收藏+]

名称:

    备忘录模式(Memento Pattern)

 

问题:

The Memento pattern contains a snapshot of the state of an object, so that the object can return to its original state without having to reveal its content to the rest of the world

 

解决方案:

    

1、 模式的参与者

    1、Memento 备忘录

    -备忘录存储原发器对象的内部状态。原发器根据需要决定备忘录存储原发器的那些内部状态。

    -防止原发器以外的其他对象访问备忘录。备忘录实际上有两个接口,管理者(Caretaker)只能看到备忘录的窄接口-它只能将备忘录传递给其他对象。相反,原发器能看到一个宽接口,允许它访问返回到先前状态所需的所有数据。理想的情况是只循序生成本备忘录的那个原发器访问本备忘录的内部状态。

    2、Originator 原发器

    -原发器创建一个备忘录,用以记录当前时刻它的内部状态。

    -使用备忘录恢复内部状态。

    3、Caretaker 负责人

    -负责保存好备忘录。

    -不能对备忘录的内容进行操作或检查。

 

2.实现方式

    

class Memento
{ 
    private String state; 
    public Memento(String state)
    { 
        this.state=state; 
    }     
    public void setState(String state)
    { 
        this.state=state; 
    }
    public String getState()
    { 
        return state; 
    }
}
class Originator
{ 
    private String state;     
    public void setState(String state)
    { 
        this.state=state; 
    }
    public String getState()
    { 
        return state; 
    }
    public Memento createMemento()
    { 
        return new Memento(state); 
    } 
    public void restoreMemento(Memento m)
    { 
        this.setState(m.getState()); 
    } 
}
class Caretaker
{ 
    private Memento memento;       
    public void setMemento(Memento m)
    { 
        memento=m; 
    }
    public Memento getMemento()
    { 
        return memento; 
    }
}
public class MementoPattern
{
    public static void main(String[] args)
    {
        Originator or=new Originator();
        Caretaker cr=new Caretaker();       
        or.setState("S0"); 
        System.out.println("state:"+or.getState());           
        cr.setMemento(or.createMemento());       
        or.setState("S1"); 
        System.out.println("new state:"+or.getState());        
        or.restoreMemento(cr.getMemento()); 
        System.out.println("restore state:"+or.getState());
    }
}

 

参考资料

《设计模式:可复用面向对象软件的基础》

 

备忘录模式

原文:https://www.cnblogs.com/diameter/p/13220561.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!