设计模式之Memento模式

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

适用场合:比较适合用于功能比较复杂,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时。

首先定义一个Originator(发起人)类

public class Originator {

    private String state;//需要保存的属性(可以定义多个)

    public void setState(String state){
        this.state=state;
    }

    public String getState(){
        return state;
    }

    //创建备忘录,将当前需要保存的信息导入并实例化一个Memento对象
    public Memento createMemento(){
        return new Memento(state);
    }

    //恢复备忘录
    public void setMemento(Memento memento){
        state=memento.getState();
    }

    public void show(){
        System.out.println("state="+state);
    }
}

定义一个Memento(备忘录)类

public class Memento {

    private String state;

    //通过构造方法将相关数据导入
    public Memento(String state){
        this.state=state;
    }

    public String getState(){
        return state;
    }
}

然后定义一个Caretaker(管理者)类,封装Memento

public class Caretaker {

    private Memento memento;

    //设置备忘录
    public void setMemento(Memento memento){
        this.memento=memento;
    }

    //得到备忘录
    public Memento getMemento(){
        return memento;
    }
}

客户端代码

    public static void main(String[] args) {

        //备忘录模式
        Originator originator=new Originator();
        originator.setState("on");//初始状态为on
        originator.show();

        Caretaker caretaker=new Caretaker();
        caretaker.setMemento(originator.createMemento());

        originator.setState("off");//状态改变为off
        originator.show();
        //恢复原来状态
        originator.setMemento(caretaker.getMemento());
        originator.show();
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-10 22:44:20

设计模式之Memento模式的相关文章

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

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

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

一. 备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 结构图: 使用范围: Memento 模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator 可以根据保存的 Memento 信息还原到前一状态. 代码: [cpp] view plaincopy //备忘录类 //负责存储 Originator 对象的内部状态 class Meme

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

Memento模式? 使用面向对象编程的方式实现撤销功能时,需要事先保存实例的相关状态信息.然后,在撤销时,还需要根据所保存的信息将实例恢复至原来的状态.这个时候你需要使用Memento设计模式.(以及实例实现对状态的保存) 关键字: 1.·Undo(撤销) 2.·Redo(重做) 3.·History(历史记录) 4.·Snapshot(快照) 破坏封装性: 将依赖于实例内部结构的代码分散地编写在程序中的各个地方,导致程序变得难以维护. 宽窄接口 wide interface--宽接口(APl

Memento模式详解--设计模式(16)

Memento模式来源:      我们在进行软件系统的设计时候是要给用户后悔的权利(实际上可能也是用户要求的权利:)),我们对一些关键性的操作肯定需要提供诸如撤销(Undo)的操作.那这个后悔药就是Memento模式提供的. Memento模式作用:       在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态. Memento模式UML结构图如图1所示:                       Memento模式构成:

23种设计模式之备忘录模式(Memento)

备忘录模式确保在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态.备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤. 优点: 1)保持封装的完整. 2)简化了返回到初始状态所需的操作. 使用场景: 1)必须保存对象状态的快照,这样以后就可以恢复状态. 2)使用直接接口来获得状态可能会公开对象的实现细节,从而破坏对象的封装性. Memento 模式

【设计模式】备忘录模式

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样,以后就可以将该对象恢复到原先保存的状态.下面是一个用C++描述的备忘录模式的基本框架. #include <iostream> #include <string> using namespace std; // 备忘录 class Memento { public: // 保存数据 Memento(const string &str = "") { state

设计模式之策略模式(Strategy)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

设计模式之代理模式(Proxy)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

大话设计模式_备忘录模式(Java代码)

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 简单描述:一个Memento类,代表Originator中要备份的属性.Originator负责生成备份和还原备份,CareTaker负责存储备份 大话设计模式中的截图: 例子代码: Memento类: 1 package com.longsheng.memento; 2 3 public class Memento { 4 5 private String sta