先贴代码有空来写内容。

备忘录1

 //简单的备忘录,只可以记录上一次修改前的状态,实现撤回一次的操作。
class Student{
private String name;
private String age;
private String gender;
//在Student类中直接设立一个Student实例,用于存储该类对象的上一个状态
private Student memento=null;
//构造函数就不啰嗦了
public Student(){}
public Student(String n,String a,String g){
name = n;
age = a;
gender = g;
}
//在调用可能改变类属性的函数时,要调用saveMemento以备份修改前的实例。
public void setName(String n){
saveMemento();
name = n;
}
public String getName(){
return name;
}
//和上面一样就不罗嗦了
public void setAge(String a){
saveMemento();
age = a;
}
public String getAge(){
return age;
}
public void setGender(String g){
saveMemento();
gender = g;
}
public String getGender(){
return gender;
}
//new 一个本类实例,用于备份当前实例
private void saveMemento(){
memento = new Student(this.name,this.age,this.gender);
}
//返回备份
public Student getMemento(){
return memento;
}
public String toString(){
return "name: "+name+" age: "+age+" gender: "+gender;
}
}

测试类

 public class Test{
public static void main(String[] args){
Student tom = new Student("Tom","16","m"); System.out.println("初始信息:"+tom);
//调用set函数,tom发生了改变
tom.setGender("f");
System.out.println("修改后信息:"+tom);
//tom回到改变前的状态
tom = tom.getMemento();
System.out.println("撤回到修改前:"+tom); System.out.println("初始信息:"+tom);
tom.setName("Jarry");
System.out.println("修改后信息:"+tom);
tom = tom.getMemento();
System.out.println("撤回到修改前:"+tom);
}
}

备忘录2

 //这个备忘录可以实现多次撤回。
import java.util.Stack;
class Student{
private String name;
private String age;
private String gender;
//在Student类中直接设立一个存储Student实例的栈,用于存储该类对象的备份
private Stack<Student> memento = null;
//构造函数就不啰嗦了
public Student(){}
public Student(String n,String a,String g){
name = n;
age = a;
gender = g;
memento = new Stack<Student>();
}
//在调用可能改变类属性的函数时,要调用saveMemento以备份修改前的实例。
public void setName(String n){
saveMemento();
name = n;
}
public String getName(){
return name;
}
//和上面一样就不罗嗦了
public void setAge(String a){
saveMemento();
age = a;
}
public String getAge(){
return age;
}
public void setGender(String g){
saveMemento();
gender = g;
}
public String getGender(){
return gender;
}
//将实例的当前状态push到备忘录中
private void saveMemento(){
memento.push(new Student(this.name,this.age,this.gender));
}
//这里不再返回一个新的Student,而是pop出备忘录中的实例,用它的属性给本this的属性赋值
public Student getMemento(){
Student preMemento = memento.pop();
name = preMemento.getName();
age = preMemento.getAge();
gender = preMemento.getGender();
return this;
}
public String toString(){
return "name: "+name+" age: "+age+" gender: "+gender;
}
}

测试类

public class Test{
public static void main(String[] args){
Student tom = new Student("Tom","16","m"); System.out.println("初始信息:"+tom);
//调用set函数,tom发生了改变
tom.setGender("f");
System.out.println("修改后信息:"+tom);
tom.setName("Jarry");
System.out.println("修改后信息:"+tom);
tom.setAge("17");
System.out.println("修改后信息:"+tom);
tom.setName("haha");
System.out.println("修改后信息:"+tom);
//tom回到改变前的状态
System.out.println("撤回到修改前:"+tom.getMemento());
System.out.println("撤回到修改前:"+tom.getMemento());
System.out.println("撤回到修改前:"+tom.getMemento());
System.out.println("撤回到修改前:"+tom.getMemento());
}
}

memento3

设计模式03备忘录(java)的更多相关文章

  1. 折腾Java设计模式之备忘录模式

    原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...

  2. 23种设计模式全解析 (java版本)

    转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...

  3. 设计模式:备忘录(Memento)模式

    设计模式:备忘录(Memento)模式 一.前言   备忘录模式用于保存和恢复对象的状态,相信大家看过我前面的拙作就会想到原型模式也能保存一个对象在某一个时刻的状态,那么两者有何不同的呢?原型模式保存 ...

  4. 北风设计模式课程---备忘录(Memento)模式

    北风设计模式课程---备忘录(Memento)模式 一.总结 一句话总结: 备忘录模式也是一种比较常用的模式用来保存对象的部分用于恢复的信息,和原型模式有着本质的区别,广泛运用在快照功能之中.同样的使 ...

  5. 从设计模式说起JAVA I/O流

    从设计模式说起JAVA I/O流 之前写过一篇I/O流的入门介绍,直到最近看了设计模式,顺带理下I/O流的设计思路. JAVA类库中的I/O类分成输入和输出两部分,通过继承,任何自InputStrea ...

  6. 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)

    原文:乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) 作者:webabc ...

  7. C#设计模式:备忘录模式(Memento Pattern)

    一,C#设计模式:备忘录模式(Memento Pattern) 1.发起人角色(Originator):记录当前时刻的内部状态,负责创建和恢复备忘录数据.负责创建一个备忘录Memento,用以记录当前 ...

  8. js设计模式——7.备忘录模式

    js设计模式——7.备忘录模式 /*js设计模式——备忘录模式*/ // 备忘类 class Memento { constructor(content) { this.content = conte ...

  9. [译]Java 设计模式之备忘录

    (文章翻译来自Java Design Pattern: Memento) memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态. 在将来时空旅行将成为显示 ...

随机推荐

  1. Android中的flexboxlayout布局

    提到FlexboxLayout大家估计有点模糊,它是谷歌最近开源的一个android排版库,它的前身Flexbox是2009年W3C提出了一种新的布局,可以简便.完整.响应式的实现页面布局,Flexb ...

  2. 如何区别exists与not exists?

    1.exists:sql返回结果集为真:not exists:sql不返回结果集为真.详解过程如图: exists not exists

  3. SpringMVC入门

    Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模 ...

  4. DTO – 服务实现中的核心数据

    在一个Web服务的实现中,我们常常需要访问数据库,并将从数据库中所取得的数据显示在用户页面中.这样做的一个问题是:用于在用户页面上展示的数据和从数据库中取得的数据常常具有较大区别.在这种情况下,我们常 ...

  5. (转) [it-ebooks]电子书列表

    [it-ebooks]电子书列表   [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...

  6. Android下/data/data/<package_name>/files读写权限

    今天将更新模块拿到android上面测试的时候,发现在创建writablepath.."upd/"目录的时候出现Permission Denied提示BTW:我使用的是lfs来创建 ...

  7. Linux 与 Linux Windows 文件共享 小知识

    Linux 与 Linux Windows 文件共享   前提说明:windows主机信息:192.168.1.100 帐号:abc 密码:123 共享文件夹:sharelinux主机信息:192.1 ...

  8. backup3:master 数据库的备份和还原

    在SQL Server 中,master 数据库记录系统级别的元数据,例如,logon accounts, endpoints, linked servers, and system configur ...

  9. 【.NET深呼吸】Zip文件操作(2):动态生成Zip文档

    通过前面一篇烂文的介绍,大伙儿知道,ZipArchive类表示一个zip文档实例,除了用上一篇文章中所列的方法来读写zip文件外,还可以直接通过ZipArchive类,动态生成zip文件. 文件流操作 ...

  10. 查看当前数据库正在运行的Session

    当数据库运行比较缓慢时,我们需要实时查看当前有什么Session在运行,获得信息越完整,对于分析低性能的原因越有帮助.根据之前调优的经历,简单几步分析如下: 1.通过SQL Server内置的Sp_w ...