备忘录模式

文档查阅说明:

Tongkey

yiibai

runoob

大话设计模式

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

使用场景:

● 需要保存和恢复数据的相关状态场景。

● 提供一个可回滚(rollback)的操作。

● 需要监控的副本场景中。

● 数据库连接的事务管理就是用的备忘录模式。

注意:

●备忘录的生命期

●备忘录的性能

不要在频繁建立备份的场景中使用备忘录模式(比如一个for循环中)。   

clone方式备忘录:

● 发起人角色融合了发起人角色和备忘录角色,具有双重功效

多状态的备忘录模式

● 增加了一个BeanUtils类,其中backupProp是把发起人的所有属性值转换到HashMap中,方便备忘录角色存储。restoreProp方法则是把HashMap中的值返回到发起人角色中

public class Memento {
	private boolean state;

	public Memento(boolean state) {
		super();
		this.state = state;
	}

	public boolean isState() {
		return state;
	}

	public void setState(boolean state) {
		this.state = state;
	}
	
}
public class Originator {
	private boolean state;
	private Memento memento;
	
	public boolean isState() {
		return state;
	}
	public void setState(boolean state) {
		this.state = state;
	}
	public Memento getMemento() {
		return new  Memento(state);
	}
	public void setMemento(Memento memento) {
		this.memento = memento;
	}
	
	public void show() {
		System.out.println("state:"+state);
	}
}
public class Caretaker {
	private Memento memento;

	public Memento getMemento() {
		return memento;
	}

	public void setMemento(Memento memento) {
		this.memento = memento;
	}
}
public class Test {
	public static void main(String[] args) {
		Originator originator = new Originator();
		originator.setState(true);
		originator.show();
		
		Caretaker caretaker = new Caretaker();
		caretaker.setMemento(originator.getMemento());
		
		originator.setState(false);
		originator.show();
		
		originator.setMemento(caretaker.getMemento());
		originator.show();
		
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值