先贴代码有空来写内容。

备忘录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 Studio快捷键

      一.android studio 默认快捷键 刚开始接触一款开发软件,想必很想了解它的快捷方式,这会对你的编程起到很好的帮助,提高工作效率,接下来给你介绍下Android Studio一些常用的快 ...

  2. Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决

    前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...

  3. 周末聊聊IT人员的人脉观:关于帮妹子找兼职有感

    背景: 前几天,有个认识了好几年的网友,现在是大学生,在厦门读大一,说和她同学要一起到广州找兼职,看我有没有介绍. 像我这么积极热心善良的人,就说帮她找找看,结果问了几次,没消息,只好诚实的回复人家, ...

  4. Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建

    最新的asp.net vnext已经可以支持在mac上运行了,当然用的是mono.相比linux来说,mac的安装略显繁琐.对于大部分用Windows开发asp.net的程序员来说,初次配置还是很费时 ...

  5. Team Leader 你不再只是编码, 来炖一锅石头汤吧

    h3{ color: #000; padding: 5px; margin-bottom: 10px; font-weight: bolder; background-color: #ccc; } h ...

  6. ABP框架 - 领域服务

    文档目录 本节内容: 简介 例子 创建一个接口 实现服务 使用应用服务 相关论述 为什么不只用应用服务? 如何强制你使用领域服务? 简介 领域服务(或服务)用来执行领域操作和业务规则.Eric Eva ...

  7. C# Azure 消息队列ServiceBus (服务总线队列)

    1. 前言 在阅读本文之前,可以查看微软官方的说明. https://www.azure.cn/documentation/articles/service-bus-create-queues/ 2. ...

  8. jar hell & elasticsearch ik 版本问题

    想给es 安装一个ik 的插件, 我的es 是 2.4.0, 下载了一个版本是 1.9.5, [2016-10-09 16:56:26,248][INFO ][node ] [node-2] init ...

  9. Java关键字:static

    通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...

  10. 为WLW开发Latex公式插件

    WLW是写博客的利器,支持离线.格式排版等,而且拥有众多的插件.博客园推荐了代码插入插件,但是没有提供WLW的公式编译插件.目前我的一般做法是:先在Word下使用MathType编辑好公式,然后将公式 ...