行为型设计模式-备忘录模式

来源:互联网 发布:淘宝怎么装修 编辑:程序博客网 时间:2024/06/06 18:19

备忘录模式:

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态

小应用:单机游戏中,退出游戏或者游戏故障时进行备份,游戏重新启动之后则从备份还原备份数据

备忘录模式参与角色:

发起者:记录当前时刻的内部状态,负责定义备份范围,负责创建和恢复备忘录数据

备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态

管理角色:对备忘录进行管理,保存和提供备忘录

发起者:Originator

package com.zhiwei.memento;public class Originator {    private String name;    private String content;    private String persons;    public void setName (String name) {        this.name =  name;    }    public String getName () {        return this.name;    }    public void setContent (String content) {        this.content = content;    }    public String getContent () {        return this.content;    }    public void setPersons (String persons) {        this.persons =  persons;    }    public String getPersons () {        return this.persons;    }    /**     * 备份会议记录     * @return     */    public Memento getMemento() {        return new Memento(this);    }    /**     * 还原会议记录     * @param memento     */    public void setMemento(Memento memento) {        this.name = memento.getName();        this.content = memento.getContent ();        this.persons = memento.getPersons ();    }}

备忘录:Memento

package com.zhiwei.memento;public class Memento {    private String name;    private String content;    private String persons;    public Memento(Originator originator) {        this.name = originator.getName();        this.content = originator.getContent();        this.persons = originator.getPersons();    }    public void setName(String name) {        this.name = name;    }    public String getName() {        return this.name;    }    public void setContent(String content) {        this.content = content;    }    public String getContent() {        return this.content;    }    public void setPersons(String persons) {        this.persons = persons;    }    public String getPersons() {        return this.persons;    }}

管理角色:Caretaker

package com.zhiwei.memento;public class Caretaker {    private Memento memento;    /**     * 恢复     * @return     */    public Memento getMemento() {        return memento;    }    /**     * 备份     * @param memento     */    public void setMemento(Memento memento) {        this.memento = memento;    }}

测试代码:

Originator originator = new Originator();  //发起者        originator.setName("公司销售会议");        originator.setContent("有关销售价格的会议内容");        originator.setPersons("总经理、销售处长");        System.out.println("旧内容:" + originator.getName() + " :" + originator.getContent() +  " :" + originator.getPersons());        //管理者备份数据        Caretaker caretaker = new Caretaker();        caretaker.setMemento(originator.getMemento());        originator.setName("公司办公会议");        originator.setContent("有关员工稳定的会议内容");        originator.setPersons("董事长、总经理、人事副总");        System.out.println("新内容:" + originator.getName() + " :" + originator.getContent() +  " :" + originator.getPersons());        //从管理者获取已备份的数据并恢复        originator.setMemento(caretaker.getMemento());        System.out.println("备份内容:" + originator.getName() + " :" + originator.getContent() +  " :" + originator.getPersons());

效果:
这里写图片描述

0 0