设计模式03备忘录(java)
先贴代码有空来写内容。
备忘录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)的更多相关文章
- 折腾Java设计模式之备忘录模式
原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...
- 23种设计模式全解析 (java版本)
转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...
- 设计模式:备忘录(Memento)模式
设计模式:备忘录(Memento)模式 一.前言 备忘录模式用于保存和恢复对象的状态,相信大家看过我前面的拙作就会想到原型模式也能保存一个对象在某一个时刻的状态,那么两者有何不同的呢?原型模式保存 ...
- 北风设计模式课程---备忘录(Memento)模式
北风设计模式课程---备忘录(Memento)模式 一.总结 一句话总结: 备忘录模式也是一种比较常用的模式用来保存对象的部分用于恢复的信息,和原型模式有着本质的区别,广泛运用在快照功能之中.同样的使 ...
- 从设计模式说起JAVA I/O流
从设计模式说起JAVA I/O流 之前写过一篇I/O流的入门介绍,直到最近看了设计模式,顺带理下I/O流的设计思路. JAVA类库中的I/O类分成输入和输出两部分,通过继承,任何自InputStrea ...
- 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)
原文:乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) 作者:webabc ...
- C#设计模式:备忘录模式(Memento Pattern)
一,C#设计模式:备忘录模式(Memento Pattern) 1.发起人角色(Originator):记录当前时刻的内部状态,负责创建和恢复备忘录数据.负责创建一个备忘录Memento,用以记录当前 ...
- js设计模式——7.备忘录模式
js设计模式——7.备忘录模式 /*js设计模式——备忘录模式*/ // 备忘类 class Memento { constructor(content) { this.content = conte ...
- [译]Java 设计模式之备忘录
(文章翻译来自Java Design Pattern: Memento) memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态. 在将来时空旅行将成为显示 ...
随机推荐
- Android的Kotlin秘方(II):RecyclerView 和 DiffUtil
作者:Antonio Leiva 时间:Sep 12, 2016 原文链接:http://antonioleiva.com/recyclerview-diffutil-kotlin/ 如你所知,在[支 ...
- jquery.multiselect 多选下拉框实现
第一步:链接下列文件,如果没有,到此网页下载 https://github.com/ehynds/jquery-ui-multiselect-widget,此插件基于jquery ,所以jquery的 ...
- Linux设备管理(一)_kobject, kset,ktype分析
Linux内核大量使用面向对象的设计思想,通过追踪源码,我们甚至可以使用面向对象语言常用的UML类图来分析Linux设备管理的"类"之间的关系.这里以4.8.5内核为例从kobje ...
- 如何安装并简单的使用OwinHost——Katana
微软OWIN的提出必然会引起一场风暴,而我们作为C#阵营中一份子,自然免不了会卷入其中.OWIN是什么东西,我在这里就不解析了,还不知道是OWIN是什么的读者请打开浏览器,然后搜索即可,中文的英文的应 ...
- 针对Linux ASP.NET MVC网站中 httpHandlers配置无效的解决方案
近期有Linux ASP.NET用户反映,在MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404(找不到网页) ...
- Rxjava cold/hot Observable
create Observable分为cold以及hot两种,cold主要是静态的,每次subscribe都是从头开始互不干扰,而hot的在同一时刻获得的值是一致的 cold Observable 使 ...
- <a> href属性--记录八
1.去掉<a>标签的下划线 <ul style=" list-style-type:none; margin:0;color:Gray; font-size:11px;ma ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统--任务调度系统解析
1.任务主界面.任务可以被挂起,启动,和删除.来自著名Quartz扩展 2.任务可以是执行的SQL命令,存储过程,或者是一个后台方法 3.极其复杂的调度任务,循环次数,可以自行设置.并可以间隔执行,比 ...
- 妙用psexec分析关机一直挂起的Windows update 更新
Windows 更新服务对每个IT运维人员来说都不会陌生,而且很多情况下出现的一些不兼容,产品问题通过更新都可很好的解决掉. 小弟近日为一台老爷机服务器安装Windows 产品更新就遇到了意见事情,特 ...
- 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇三:批量处理后的txt文件入库处理
篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...