文档章节

【行为型】- 备忘录模式

ZeroneLove
 ZeroneLove
发布于 02/23 10:45
字数 591
阅读 22
收藏 0

备忘录模式

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

小应用:单机游戏中,退出游戏或者游戏故障时进行备份,游戏重新启动之后则从备份还原备份数据

角色

  • 发起者:记录当前时刻的内部状态,负责定义备份范围,负责创建和恢复备忘录数据

  • 备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态

  • 管理角色:对备忘录进行管理,保存和提供备忘录


发起者:Originator

package com.zhiwei.memento;

public class Originator {
	
    private String name;
    private String content;
    private String persons;

    public void setName (String name) {
        this.name =  name;
    }
    public String getName () {
        return this.name;
    }
    public void setContent (String content) {
        this.content = content;
    }
    public String getContent () {
        return this.content;
    }
    public void setPersons (String persons) {
        this.persons =  persons;
    }
    public String getPersons () {
        return this.persons;
    }

    /**
        * 备份会议记录
        * @return
        */
    public Memento getMemento() {
        return new Memento(this);
    }

    /**
        * 还原会议记录
        * @param memento
        */
    public void setMemento(Memento memento) {
        this.name = memento.getName();
        this.content = memento.getContent ();
        this.persons = memento.getPersons ();
    }
}

备忘录:Memento

package com.zhiwei.memento;

public class Memento {

    private String name;
    private String content;
    private String persons;

    public Memento(Originator originator) {
        this.name = originator.getName();
        this.content = originator.getContent();
        this.persons = originator.getPersons();
    }

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

    public String getName() {
        return this.name;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getContent() {
        return this.content;
    }

    public void setPersons(String persons) {
        this.persons = persons;
    }

    public String getPersons() {
        return this.persons;
    }
}

管理角色:Caretaker

package com.zhiwei.memento;

public class Caretaker {

    private Memento memento;

    /**
        * 恢复
        * @return
        */
    public Memento getMemento() {
        return memento;
    }

    /**
        * 备份
        * @param memento
        */
    public void setMemento(Memento memento) {
        this.memento = memento;
    }

}

测试代码:

Originator originator = new Originator();  //发起者
originator.setName("公司销售会议");
originator.setContent("有关销售价格的会议内容");
originator.setPersons("总经理、销售处长");
System.out.println("旧内容:" + originator.getName() + " :" + originator.getContent() +  " :" + originator.getPersons());

//管理者备份数据
Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.getMemento());
originator.setName("公司办公会议");
originator.setContent("有关员工稳定的会议内容");
originator.setPersons("董事长、总经理、人事副总");
System.out.println("新内容:" + originator.getName() + " :" + originator.getContent() +  " :" + originator.getPersons());

//从管理者获取已备份的数据并恢复
originator.setMemento(caretaker.getMemento());
System.out.println("备份内容:" + originator.getName() + " :" + originator.getContent() +  " :" + originator.getPersons());

© 著作权归作者所有

ZeroneLove
粉丝 5
博文 164
码字总数 133695
作品 0
深圳
高级程序员
私信 提问
设计原则和设计模式_Index

设计原则 1.1 什么是设计原则 ?(https://my.oschina.net/jimilee/blog/732569) 1.2 设计原则如何用? 1.3 设计原则详解 1.4 30分钟快速理解面向对象设计原则 2. 设计模式 2.1 什么时候使用设...

无寄语
2016/08/14
1
0
设计模式之备忘录模式(行为型)

[TOC] 一、模式定义 备忘录模式(Memento Pattern):备忘录模式的定义是在不破坏封装的前提下,捕获一个对象的内部状态,并将该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状...

smileNicky
03/16
0
0
备忘录(Memento)模式

  备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。   备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下...

小菜鸡1
2016/09/03
24
0
【白话设计模式二十】备忘录模式(Memento)

白话设计模式 工厂模式 单例模式 【白话设计模式一】简单工厂模式(Simple Factory) 【白话设计模式二】外观模式(Facade) 【白话设计模式三】适配器模式(Adapter) 【白话设计模式四】单例模式...

陶邦仁
2016/04/12
294
0
设计模式的学习(16)备忘录模式

备忘录模式 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 介绍 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并...

杨健-YJ
01/02
12
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部