`
guafei
  • 浏览: 329344 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

备忘录模式 (下)

阅读更多
一、什么是备忘录模式
   Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。

二、备忘录模式的应用场景
   如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式。
   1)一个类需要保存它的对象的状态(相当于Originator角色)
   2)设计一个类,该类只是用来保存上述对象的状态(相当于Memento角色)
   3)需要的时候,Caretaker角色要求Originator返回一个Memento并加以保存
   4)undo或rollback操作时,通过Caretaker保存的Memento恢复Originator对象的状态

三、备忘录模式的结构



四、备忘录模式的角色和职责
Originator(原生者)
    需要被保存状态以便恢复的那个对象。
Memento(备忘录)
    该对象由Originator创建,主要用来保存Originator的内部状态。
Caretaker(管理者)
    负责在适当的时间保存/恢复Originator对象的状态。

Person.java

public class Person {
//姓名
private String name;
//性别
private String sex;
//年龄
private int age;

public Person() {

}

public Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public void display() {
System.out.println("name:" + name + ",sex:" + sex + ",age:" + age);
}

}

MainClass.java

public class MainClass {
public static void main(String[] args) {
Person per = new Person("lifengxing","男",30);

//保存内部状态
Person backup = new Person();
backup.setName(per.getName());
backup.setAge(per.getAge());
backup.setSex(per.getSex());

per.display();

//修改
per.setAge(20);
per.display();

//回滚 还原
per.setName(backup.getName());
per.setSex(backup.getSex());
per.setAge(backup.getAge());

per.display();

}
}


使用了备忘录模式的例子:
Person.java

package com.ibeifeng.ex2;

public class Person {
//姓名
private String name;
//性别
private String sex;
//年龄
private int age;

public Person() {

}

public Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public void display() {
System.out.println("name:" + name + ",sex:" + sex + ",age:" + age);
}

//创建一个备份
public Memento createMemento() {
return new Memento(name,sex,age);
}

//恢复备份,还原
public void setMemento(Memento memento) {
this.name = memento.getName();
this.sex = memento.getSex();
this.age =  memento.getAge();
}

}

Caretaker.java

package com.ibeifeng.ex2;

public class MainClass {
public static void main(String[] args) {
Person per = new Person("lifengxing","男",24);

// Memento memento = per.createMemento();
Caretaker caretaker = new Caretaker();
caretaker.setMemento(per.createMemento());

per.display();

per.setName("beifeng");
per.setSex("女");
per.setAge(1);

per.display();

per.setMemento(caretaker.getMemento());
per.display();

}
}



Memento.java

package com.ibeifeng.ex2;

public class Memento {
// 姓名
private String name;
// 性别
private String sex;
// 年龄
private int age;

public Memento(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}

MainClass.java

package com.ibeifeng.ex2;

public class MainClass {
public static void main(String[] args) {
Person per = new Person("lifengxing","男",24);

// Memento memento = per.createMemento();
Caretaker caretaker = new Caretaker();
caretaker.setMemento(per.createMemento());

per.display();

per.setName("beifeng");
per.setSex("女");
per.setAge(1);

per.display();

per.setMemento(caretaker.getMemento());
per.display();

}
}
分享到:
评论

相关推荐

    备忘录模式.rar备忘录模式.rarjava设计模式

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作历史或者游戏进度...

    备忘录模式(Memento Pattern) 1. 什么是备忘录模式? 2. 为什么需要备忘录模式? 3. 备忘录模式的核心概念 4. 备忘录模式的结构 5. 备忘录模式的基本实现 5.1 简单的文本

    备忘录模式(Memento Pattern) 1. 什么是备忘录模式? 2. 为什么需要备忘录模式? 3. 备忘录模式的核心概念 4. 备忘录模式的结构 5. 备忘录模式的基本实现 5.1 简单的文本编辑器示例 6. 备忘录模式的进阶实现 6.1 ...

    设计模式之备忘录模式

    通过运行`MementoPatternDemo`,我们可以看到备忘录模式的实际应用,理解如何在具体场景下使用它来实现状态的保存和恢复。这种模式在文本编辑器、游戏状态保存、数据备份等需要撤销/重做功能的系统中非常常见。

    设计模式-备忘录模式(讲解及其实现代码)

    备忘录模式是一种在软件工程中广泛使用的面向对象设计模式,它主要用来安全地保存对象的状态,以便在需要时能够恢复到先前的状态。备忘录模式的核心思想是封装对象的状态,将其保存到一个独立的对象(备忘录)中,而...

    设计模式之备忘录模式,内含可运行代码及详细解释

    备忘录模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在需要保护对象内部状态不被外部篡改的场景下。备忘录模式的核心思想是提供一种方法来捕获一个对象的内部状态,并在该对象之外保存这个状态...

    java设计模式-备忘录模式源代码

    备忘录模式是一种在软件工程中广泛使用的面向对象设计模式,它主要用来安全地保存对象的状态,以便在需要时能够恢复到先前的状态。这个模式的名字来源于我们日常生活中使用的备忘录,它记录了一些重要的信息,当需要...

    设计模式_备忘录模式.zip

    备忘录模式是一种在软件工程中广泛使用的结构型设计模式,其主要目的是为了在不破坏封装性的前提下,能够安全地保存对象的状态,并在需要时恢复到先前保存的状态。这种模式通常用于那些需要记录和回滚操作的重要场景...

    设计模式之备忘录模式(Memento Pattern)

    备忘录模式(Memento Pattern)是软件设计模式中的一种行为模式,它的主要目的是在不破坏对象封装性的前提下,允许对象在特定时刻保存其内部状态,并能够在之后恢复到保存时的状态。这种模式广泛应用于撤销/重做功能...

    备忘录模式Demo

    备忘录模式是一种设计模式,它在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作或者游戏进度等场景,允许...

    C#备忘录模式 代码例子

    备忘录模式是一种设计模式,它在不破坏封装性的前提下,保存对象的内部状态,以便在需要的时候恢复。在C#中,备忘录模式常用于实现撤销/重做功能,或者在需要记录和恢复对象状态的情况下。下面将详细解释备忘录模式...

    备忘录模式实现及案例

    总之,备忘录模式是一种强大的设计模式,它提供了一种在不违反封装原则的情况下保存和恢复对象状态的方法。在C#中,通过创建备忘录对象并由管理者进行管理和存储,我们可以有效地实现这一模式,提高代码的可维护性和...

    C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式

    备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到先前的状态。这种模式在需要撤销/重做功能、...

    设计模式之备忘录模式的Java版本实现

    备忘录模式在许多场景下都非常有用,例如撤销/重做功能、游戏存档、事务管理等。它提供了一种在不违反封装原则的情况下,安全地保存和恢复对象状态的方法。通过正确使用备忘录模式,我们可以使代码更易于维护,同时...

    备忘录模式 C++ 实现

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获和恢复一个对象的内部状态。在C++中实现备忘录模式,可以有效地帮助开发者在程序运行过程中保存对象的状态,以便在需要时恢复到之前的状态,这...

    设计模式 - 备忘录模式(C++实例)

    备忘录模式是一种在不破坏封装性的前提下,捕获一个对象的状态,并允许在未来的某个时刻恢复这个状态的设计模式。这种模式在很多场景下都非常有用,例如在游戏中保存进度、在编辑器中撤销/重做操作等。备忘录模式的...

    设计模式-备忘录

    备忘录模式是一种常用的设计模式,它在软件工程中用于保存对象的状态,以便在需要时恢复到之前的状态。这种模式的主要目标是实现数据的安全存储,同时保持对象的封装性,避免对外部对象直接访问其内部状态。在iOS...

    Java设计模式-备忘录

    备忘录模式是一种行为设计模式,它允许对象在不破坏封装性的前提下捕获并存储其内部状态,以便稍后恢复到该状态。这种模式常用于在游戏中保存进度、撤销/重做操作、以及在复杂业务逻辑中保存中间计算结果等场景。 ...

    备忘录模式代码示例

    备忘录模式是一种设计模式,它允许对象在不破坏封装性的前提下,捕获和存储其内部状态,以便在需要时能恢复到该状态。这种模式在需要保存和恢复对象状态,而又不想对外部世界暴露其内部实现细节时非常有用。备忘录...

    备忘录模式笔记1

    备忘录模式是一种行为型设计模式,它允许对象在不暴露其内部状态的情况下保存和恢复状态。这种模式通常用于需要保存和恢复对象状态的情况,例如游戏存档、Undo/Redo 操作等。 备忘录模式的组成 备忘录模式主要由三...

    备忘录模式-极客学院-java-课件代码

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要撤销/重做操作的场景,或者在...

Global site tag (gtag.js) - Google Analytics