备忘录模式

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

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

/**
 * 发起者 
 *
 */
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值