18.备忘录模式

备忘录模式就是保存某个对象内部状态的拷贝,这样就可以将该对象恢复为原来的对象。

结构:

源发器类;备忘录类;负责人类;

//源发器类public class Emo {
    private String ename;
    private int age;
    private String salary;

    //进行备忘录操作
    public EmpMemento memento(){
        return new EmpMemento(this);
    }
    //进行数据恢复
    public void recovery(EmpMemento em){
        this.ename = em.getEname();
        this.age = em.getAge();
        this.salary = em.getSalary();
    }

    public Emo(String ename, int age, String salary) {
        super();
        this.ename = ename;
        this.age = age;
        this.salary = salary;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSalary() {
        return salary;
    }
    public void setSalary(String salary) {
        this.salary = salary;
    }

}//备忘录类
public class EmpMemento {
    private String ename;
    private int age;
    private String salary;

    public EmpMemento(Emo e){
        this.ename = e.getEname();
        this.age = e.getAge();
        this.salary = e.getSalary();
    }

    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSalary() {
        return salary;
    }
    public void setSalary(String salary) {
        this.salary = salary;
    }

}//负责人类
public class CareTake {
    private EmpMemento empMemento;//可以将其保存到容器中 比如Stack

    public EmpMemento getEmpMemento() {
        return empMemento;
    }

    public void setEmpMemento(EmpMemento empMemento) {
        this.empMemento = empMemento;
    }

}
public class Client {

    public static void main(String[] args) {
        CareTake careTake = new CareTake();
        Emo emo = new Emo("kobe", 23, "15000");
        System.out.println("第一次打印:"+emo.getEname()+" "+emo.getAge()+" "+emo.getSalary());
        careTake.setEmpMemento(emo.memento());
        emo.setEname("james");
        emo.setAge(33);
        emo.setSalary("15000");
        System.out.println("第二次打印:"+emo.getEname()+" "+emo.getAge()+" "+emo.getSalary());

        emo.recovery(careTake.getEmpMemento());
        System.out.println("第三次打印:"+emo.getEname()+" "+emo.getAge()+" "+emo.getSalary());
    }
}

运行结果:
第一次打印:kobe 23 15000
第二次打印:james 33 18000
第三次打印:kobe 23 15000

应用场景:

棋类游戏中:悔棋

普通软件中:撤销操作

数据库软件中:回滚操作

原文地址:https://www.cnblogs.com/menbo/p/10193011.html

时间: 2024-11-05 20:28:38

18.备忘录模式的相关文章

设计模式(18)-----备忘录模式

备忘录模式(memento) 定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象回复到原先保存的状态. UML图 角色说明 备忘录(Memento)角色 (1)将发起人(Originator)对象的内战状态存储起来.备忘录可以根据发起人对象的判断来决定存储多少发起人(Originator)对象的内部状态. (2)备忘录可以保护其内容不被发起人(Originator)对象之外的任何对象所读取. 发起人(Originator)角色 (1)创建一个含

笔记-大话设计模式-18 备忘录模式

备忘录模式(Memento),在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态.Originator可根据需要决定Memento存储Originator的哪些内部状态. Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento

(18)备忘录模式

 (18)备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样就可以将该对象恢复到原先保存的状态 类型:行为类 类图: 我们在编程的时候,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状态.比如,我们使用Eclipse进行编程时,假如编写失误(例如不小心误删除了几行代码),我们希望返回删除前的状态,便可以使用Ctrl+Z来进行返回.这时我们便可以使用备忘录模式来实现. 备忘录模式的结构 发起人:记录当前时刻的内部状态,负责定义哪些属于备

第18章 备忘录模式(Memento Pattern)

原文  第18章 备忘录模式(Memento Pattern) 备忘录模式       概述: 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式. 定义(源于GoF<设计模式>):在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 结构图:        代码举例: 1 2 3 4 5 6 7 8 9 10 11 12 13

大话设计模式C++实现-第18章-备忘录模式

一.UML图 二.概念 备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将对象恢复到原先保存的状态. 三.说明 角色: (1)Originator(发起人):负责创建一个Memento,用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态.Originator可以根据需要决定Memento存储Originator的哪些内部状态. (2)Memento(备忘录):负责存储Originator对象的内部状态,并可以防止Origi

[Python设计模式] 第18章 游戏角色备份——备忘录模式

github地址:https://github.com/cheesezh/python_design_patterns 题目 用代码模拟以下场景,一个游戏角色有生命力,攻击力,防御力等数据,在打Boss前后的数据值会发生变化,如果玩家挑战Boss失败,我们允许玩家可以将游戏数据恢复到与Boss决斗之前的状态. 基础版本 class GameRole(): def __init__(self): self.vitality = 0 self.attack = 0 self.defense = 0

4 行为型模式之- 备忘录模式

备忘录模式介绍: 备忘录模式是一种行为模式,该模式用于保存对象当前的状态,并且在之后可以再次恢复到此状态,这有点像我们平时说的"后悔"药.备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外界访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露 备忘录模式的定义: 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可以将对象恢复到原先的状态 对于备忘录模式来说,比较贴切的场景应该是游戏中的存档功能,该功能就是将游戏进度存储到

备忘录模式

备忘录模式,望文生义就知道它是用来做备忘的,或者可以直接说是“备份”.当需要保存当前状态,以便在不久要恢复此状态时,就可以使用“备忘录模式”.将当前”状态“备份,是不是又new一个类,然后将每个字段方法copy过去就可以了呢?或者说使用我们之前clone方法做深复制浅复制呢?其实不然,在<大话设计模式>中,作者提到了原因,这样会暴露更多的细节给客户端,不符合我们面向对象的思想.什么是暴露更多的细节给客户端?我们来看下面一段代码. 1 package day_27_memento; 2 3 /*

设计模式(12)---备忘录模式

备忘录模式   Memento (行为型模式) 1.概述 备忘录模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态. 例如:一些软件提供的撤销功能,游戏的存档读档功能. 2.结构图 3.代码 1 /* 2 * 原发器类 Originator 3 */ 4 public class Role { 5 6 private int level ; 7 private int life ; 8 9 public Role() { 10