行为型模式-备忘录模式

备忘录模式

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

备忘录模式角色

  1. 发起人(Originator)角色:该角色记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据;
  2. 备忘录(Memento)角色:该角色负责存储发起人角色的内部状态,在需要时提供发起人需要的备份状态数据;
  3. 负责人(Caretaker)角色:该角色对备忘录角色进行管理,保存和提供备忘录。

使用场景

  1. 需要保存和恢复数据的相关状态场景;
  2. 提供一个可回滚的操作;
  3. 需要监控副本的场景;
  4. 数据库连接的事务管理使用的就是备忘录模式。

<span style="font-size:18px;">package memento;
/**
 * 发起人,该角色记录当前状态,负责定义哪些属于备份范围
 * 负责创建和恢复备份数据
 *
 */
public class Originator {

	//内部状态
	private String state = "";
	
	//创建备忘录
	public Memento createMemento(){
		return new Memento(this.state);
	}

	//恢复一个备忘录
	public void restoreMemento(Memento memento){
		this.setState(memento.getState());
	}
	public String getState() {
		return state;
	}

	public void setState(String state) {
		this.state = state;
	}
	
	
}
</span>

<span style="font-size:18px;">package memento;
/**
 * 备忘录,该角色存储发起人角色的内部状态,在需要时提供
 * 发起人所需要的内部状态数据
 *
 */
public class Memento {

	//发起人的内部状态
	private String state;
	//构造参数,传入发起人的要非法的内部状态
	public Memento(String state){
		this.state = state;
	}
	public String getState() {
		return state;
	}
	public void setState(String state) {
		this.state = state;
	}
	
}
</span>

<span style="font-size:18px;">package memento;

/**
 * 负责人,负责管理发起人、备忘录
 *
 */
public class Caretaker {

	//备忘录对象
	private Memento memento;

	public Memento getMemento() {
		return memento;
	}

	public void setMemento(Memento memento) {
		this.memento = memento;
	}
	
	
}
</span>

<span style="font-size:18px;">package memento;

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建发起人角色
		Originator originator = new Originator();
		//定义负责人
		Caretaker care = new Caretaker();
		//创建备忘录对象
		care.setMemento(originator.createMemento());
		//恢复一个备忘录状态
		originator.restoreMemento(care.getMemento());
	}

}
</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值