设计模式(十八) 备忘录模式

本文详细介绍了备忘录模式的概念,包括其角色定义、应用场景、注意事项及扩展方式。通过具体的Java代码示例,展示了如何在不破坏封装性的前提下,捕获并恢复对象的内部状态。

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

在这里插入图片描述

备忘录模式角色:

  • Originator 发起人角色
  • Memento 备忘录角色
  • Caretaker 备忘录管理员角色
public class Originator{
	private String state="";
	public String getState(){
		return state;
	}
   public void setState(String state){
		this.state=state;
	}
	//创建备忘录
	public Memento createMemento(){
		return new Memento(this.state);
	}
	//恢复备忘录
	public void restoreMemento(Memento memento){
		this.setState(memento.getState());
	}
}

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;
}
}

public class Caretaker{
	private Memento memento;
	public Memento getMemento(){
		return memento;
}

public void setMemento(Memento memento){
	this.memento=memento;
}
}

public  class Client{
	public static void main(String [] args){
		Originator originator=new Originator();
		Caretaker caretaker=new Caretaker();
		caretaker.setMemento(originator.createMemento());
		originator.restoreMemento(caretaker.getMemento());
}
}

备忘录模式的应用场景

  • 需要提供一个可回滚的操作
  • 需要监控的副本场景中
  • 数据库连接的事务管理就是用的备忘录模式

备忘录模式的注意事项

  • 备忘录的生命周期 。要主动管理备忘录对象,不使用就要删除引用, 等待垃圾回收器对它的回收处理
  • 备忘录的性能 不要在循环中使用备忘录。1. 控制不了备忘录建立的对象数量 2. 大对象的建立要消耗资源

备忘录模式的扩展

  • 利用clone方式的备忘录,这个也会牵涉到浅拷贝的问题
  • 利用hashmap进行多状态,多版本的备忘录
  • 为了达到更好的封装。 可以采用内部类进行处理。 内部类全是private的访问权限。 可以增加一个接口,完成关联的效果。

要点:

考虑到对象的安全问题。一个类可以实现多个接口, 一个是业务的正常接口,叫宽接口。 另一个接口是空接口,目的是提供给子系统外的模块访问。比如容器对象,这个叫做窄接口。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值