备忘录模式

来源:互联网 发布:centos输入法下载 编辑:程序博客网 时间:2024/05/16 09:17

今天无意间看到了备忘录模式,由于之前没有接触过,出于好奇,研究了一下,简单来说就是把当前状态记录下来,作为备份,用于意外情况发生恢复用的,有点类似于回退的意思。
备忘录设计模式,总共分为三个角色:
发起人:要备份的成员,将自身的属性信息进行备份,恢复自身的属性信息等
备忘录:存储发起人要备份的属性信息
管理者:管理备忘录对象

下面以表单信息为样例进行演示:
首先是发起人类:

/** * 发起者  * */public class TableInfo {    /**编号*/    private int id;    /**名字*/    private String name;    /**工作*/    private String job;    /**地址*/    private String address;    public TableInfo(int id,String name,String job,String address){        this.id=id;        this.name=name;        this.job=job;        this.address=address;    }    /**恢复状态*/    public void recovery(Copy copy){        this.id=copy.getId();        this.name=copy.getName();        this.job=copy.getJob();        this.address=copy.getAddress();    }    /**备份状态*/    public Copy backup()    {        Copy copy=new Copy();        copy.setId(this.id);        copy.setName(this.name);        copy.setJob(this.job);        copy.setAddress(this.address);        return copy;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getJob() {        return job;    }    public void setJob(String job) {        this.job = job;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }}

下面是 备忘录类:

/** *  *备忘录角色 */public class Copy {    /**编号*/    private int id;    /**名字*/    private String name;    /**工作*/    private String job;    /**地址*/    private String address;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getJob() {        return job;    }    public void setJob(String job) {        this.job = job;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }}

下面是 管理者类:

/** * 管理者  * */public class Manager {    private Copy copy;    public Copy getCopy() {        return copy;    }    public void setCopy(Copy copy) {        this.copy = copy;    }}

下面是具体调用方式:

        TableInfo tableInfo=new TableInfo(1, "Tom", "开发工程师", "北京");        Manager manager=new Manager();        manager.setCopy(tableInfo.backup());        tableInfo.setAddress("上海");        //下面是想恢复了        tableInfo.recovery(manager.getCopy());

到此也就将所有相关代码写完了,所以看起来还是非常简单的,下面简单罗列一下该设计模式的优缺点(摘自百度文库):
优点:
1. 将被存储的状态放在外面,不要和关键对象混在一起,可以帮助维护内聚
2. 保持关键对象的数据封装
3. 3. 提供了容易实现的恢复能力
缺点:
1. 储存和恢复状态的过程可能相当耗时
用途 :
备忘录模式用于存储状态,在java中可以使用序列化。
经典例子:
游戏中途保存游戏,这时候可以调用保存当前状态方法,再读取的时候调用读取。Java序列化机制在这方面非常的方便。

0 0
原创粉丝点击