行为型模式之备忘录模式

备忘录模式Memento

备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 实现了信息的封装,使得用户不需要关心状态的保存细节。

1.场景

  • Word编辑时断电,重新开机,恢复到编辑时状态
  • 打游戏时的存档。
  • Windows 里的 ctri + z。
  • 数据库的事务管理。

2.结构

源发器类Originator
备忘录类Memento
负责人类CareTaker

//源发器类Originator
package com.liang.memento;
public class Emp {
	private String ename;
	private int age;
	private String dept;
	
	//数据备份
	public EmpMemento memento() {
		return new EmpMemento(this);
	}
	
	//数据恢复
	public void recover(EmpMemento m) {
		this.ename = m.getEname();
		this.age = m.getAge();
		this.dept = m.getDept();
	}
	
	
	public Emp(String ename, int age, String dept) {
		super();
		this.ename = ename;
		this.age = age;
		this.dept = dept;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getDept() {
		return dept;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}

}


//备忘录类Memento
package com.liang.memento;
public class EmpMemento {
	private String ename;
	private int age;
	private String dept;
	
	
	//数据备份
	public EmpMemento(Emp e) {
		this.ename=e.getEname();
		this.age=e.getAge();
		this.dept=e.getDept();
	}
	
	
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getDept() {
		return dept;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
	
}

package com.liang.memento;
import java.util.ArrayList;
import java.util.List;

/**
 * 负责人类,管理备忘录对象
 * @author Administrator
 *
 */
public class CareTaker {
	private EmpMemento empMemento;
	
	//可以储存多个备忘点
//	private List<EmpMemento> list=new ArrayList<>();
	
	public EmpMemento getEmpMemento() {
		return empMemento;
	}

	public void setEmpMemento(EmpMemento empMemento) {
		this.empMemento = empMemento;
	}
}

package com.liang.memento;
public class Client {
	public static void main(String[] args) {
		CareTaker taker=new CareTaker();
		
		Emp e=new Emp("张三", 23, "研发部");
		System.out.println(e.getEname()+"--"+e.getAge()+"--"+e.getDept());
		
		taker.setEmpMemento(e.memento());//备忘一次
		
		e.setAge(45);
		e.setEname("李四");
		System.out.println(e.getEname()+"--"+e.getAge()+"--"+e.getDept());
		
		e.recover(taker.getEmpMemento());//恢复
		System.out.println(e.getEname()+"--"+e.getAge()+"--"+e.getDept());
		
	}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值