大话设计模式目录_大话设计模式程杰mobi

大话设计模式目录_大话设计模式程杰mobi大话设计模式之备忘录模式

大家好,又见面了,我是你们的朋友全栈君。

备忘录模式

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

大话设计模式目录_大话设计模式程杰mobi

涉及到的角色描述

  originator(发起人):   负责创建一个备忘录memento,用来记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。originator可根据需要决定memento存储它的哪些内部状态

  memento(备忘录): 负责存储originator的内部状态,并可防止originator以外的其他对象访问备忘录memento。备忘录有两个接口,caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。originator能够看到一个宽接口,允许它访问返回先前状态所需的所有数据。

  caretaker(管理者): 负责保存好备忘录memento,不能对备忘录的内容进行操作或检查。

优点: 

  1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。

  2、实现了信息的封装,使得用户不需要关心状态的保存细节。

缺点:

  消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。

使用场景: 

  1、需要保存/恢复数据的相关状态场景。

  2、提供一个可回滚的操作。

具体代码实现

  创建备忘录

package com.chenpt.designModel.mementoModel;

/**
 * @Author: chen
 * @Description: 备忘录类
 * @Date: created in 2018/8/28
 * @Modified By:
 */
public class Memento {

    private String state;

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

    //需要保存的数据属性,可以是多个
    public String getState() {
        return state;
    }


}

  创建发起人

package com.chenpt.designModel.mementoModel;

/**
 * @Author: chen
 * @Description: 发起人
 * @Date: created in 2018/8/28
 * @Modified By:
 */
public class Originator {
    private String state;//需要保存的属性

    public String getState() {
        return state;
    }

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

    /**
     * 创建备忘录,将当前需要保存的数据导入并实例化一个memento对象
     * @return
     */
    public Memento setStateToMemento(){
        return new Memento(state);
    }

    /**
     * 恢复备忘录,将memento导入并将相关数据恢复
     * @param memento
     */
    public void getStateFromMemento(Memento memento){
        state = memento.getState();
    }

    /**
     * 数据展示
     */
    public void show(){
        System.out.println(state);
    }
}

  创建管理者

package com.chenpt.designModel.mementoModel;

/**
 * @Author: chen
 * @Description: 管理者
 * @Date: created in 2018/8/28
 * @Modified By:
 */
public class CareTaker {
    private Memento memento;//得到或设置备忘录

    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }
}

  客户端

package com.chenpt.designModel.mementoModel;

/**
 * @Author: chen
 * @Description:
 * @Date: created in 2018/8/28
 * @Modified By:
 */
public class MainTest {

    public static void main(String[] a){
        Originator originator = new Originator();
        originator.setState("on");
        originator.show();

        CareTaker careTaker = new CareTaker();
        careTaker.setMemento(originator.setStateToMemento());

        originator.setState("off");
        originator.show();

        originator.getStateFromMemento(careTaker.getMemento());
        originator.show();
    }

}
//执行结果
on
off
on

  

 

转载于:https://www.cnblogs.com/chenpt/p/9547988.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107341.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java常用设计模式

    Java常用设计模式一、设计模式概念1、定义​Java包含23种设计模式,是一套对代码设计经验的总结,被人们反复利用,多人熟知的代码设计方式。2、目的​为了提高代码的可读性,可扩展性以及代码的复用性,为了解决在写代码过程中遇到的代码设计问题。3、设计模式的六大原则​3.1开闭原则​对扩展开放,对修改关闭(尽可能对代码少修改)​3.2里氏替换原则​它是面向对象基本原则之一,任何父类(基类)出现的地方,子类都可以出现,也就是子类可以替换父类的任何功能(体现了父类的可扩展性)3.3依赖

    2022年7月8日
    24
  • 六、策略模式—旅行的交通工具 #和设计模式一起旅行#[通俗易懂]

    兵无常势,水无常形,能因敌变化而取胜者,谓之神! ——《孙子兵法》故事背景旅行开始,我和设计模式mm要去的目的地很多,去往不同目的地可以选择的交通工具也是多样的,从北京到上海,我们可以选择自驾游、乘坐飞机、高铁,甚至是骑单车等等方式!每一种交通工具到达目的的时间也不同,假如从北京到上海,乘坐飞机两个小时,高铁五个小时,自驾游3天(3*24小时),每一种交通费也不一样!假…

    2022年2月27日
    48
  • 设计模式 – 结构型设计模式 – 适配器模式(Java)

    设计模式 – 结构型设计模式 – 适配器模式(Java)分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netDefinitionSeparatetheconstructionofacomplexobjectfromitsrepresentationsothatthesameconstructionprocesscan…

    2022年7月25日
    14
  • 一、设计模式-开篇—为什么我要去旅行? #和设计模式一起旅行#

    独学而无友,则孤陋而寡闻。——《礼记·学记》写在开篇,本篇是一个综合帖,里面可能会记录一些我的学习感受,也可能记录一些我学习的资料的说明,总之这就是一个大杂烩的博文。开篇杂谈最近学习一些技术之外的其他东西,怎么进行时间管理了,怎么坚持去做一件事情了,还是学到了一些其他的新的东西!做一件事情最难的是什么,是启动!启动之后最难是什么,是坚持!很多时候大的道理我们都懂,但…

    2022年2月27日
    52
  • 23种设计模式(15):备忘录模式

    23种设计模式(15):备忘录模式

    2021年11月16日
    44
  • 面试 设计题_设计模式面试题及答案

    面试 设计题_设计模式面试题及答案文章目录设计模式什么是设计模式为什么要学习设计模式设计模式分类设计模式的六大原则开放封闭原则(OpenClosePrinciple)里氏代换原则(LiskovSubstitutionPrinciple)依赖倒转原则(DependenceInversionPrinciple)接口隔离原则(InterfaceSegregationPrinciple)迪米特法则(最少知道原则)(Deme…

    2025年11月7日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号