博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——备忘录模式
阅读量:6842 次
发布时间:2019-06-26

本文共 1414 字,大约阅读时间需要 4 分钟。

      备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。

  备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。

      简单的说备忘录模式就是在想让对象回到原来某个时间点的状态时,可以通过撤销(undo)来简单的实现。

      在备忘录模式中,源发器对象是要备忘的对象。备忘录对象用来备忘某个时间点的对象状态。负责人对象用来记录备忘的那个时间点。

      备忘录有;两个重要的目标:一个是存储系统关键对象的重要状态,二是维护关键对象的封装。

      看一个介绍:

       看一个Demo:

 

/** * 源发器对象 * @author wxisme * */public class Emp {	private String name;	private int age;		public Emp(String name, int age) {		this.age = age;		this.name = name;	}	//数据恢复	public void recovery(EmpMemento emt) {		this.age = emt.getAge();		this.name = emt.getName();	}	//备忘	public EmpMemento memento() {		return new EmpMemento(this);	}			public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}		}public class EmpMemento {	private String name;	private int age;		public EmpMemento(Emp emp) {		this.age = emp.getAge();		this.name = emp.getName();	}					public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}		}public class Taker {	private EmpMemento empm;	public EmpMemento getEmpm() {		return empm;	}	public void setEmpm(EmpMemento empm) {		this.empm = empm;	}		}

 PS:深度备忘,保证对象中的属性对象不会随着源发对象的改变而改变,参考原型模式中的深度拷贝。

转载地址:http://eobul.baihongyu.com/

你可能感兴趣的文章
php 计算两个日期相隔多少年,多少月,多少天
查看>>
[LeetCode]Number of Islands
查看>>
如何理解javascript的call和apply
查看>>
linux上安装redis
查看>>
elasticsearch
查看>>
Python 中包/模块的 `import` 操作
查看>>
HBase2.0在360的技术改进与应用实践
查看>>
kubernetes资源对象--Horizontal Pod Autoscaling(HPA)
查看>>
阿里云RPA(机器人流程自动化)干货系列之六:客户端安装及激活
查看>>
MySQL中SQL优化的常用方法
查看>>
[WPF]有Focus(), 那Unfocus()呢?
查看>>
CentOS 软件安装之Nginx源码安装
查看>>
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 7 章 查询_7.3. 选择列表
查看>>
Intel 收购 Vertex.AI,打造开源深度学习引擎 PlaidML
查看>>
独家 | 用Python Featuretools库实现自动化特征工程(附链接)
查看>>
Thrift源码解析--transport
查看>>
百度竞价账户托管,屏蔽账户恶意点击的2种策略,非常规。
查看>>
JavaScript面向对象编程简明教程
查看>>
[译] 5 个有趣的 Linux 命令行技巧
查看>>
Core Data的基本使用简介
查看>>