文档章节

设计模式-行为-Memento(备忘录)模式

梦想游戏人
 梦想游戏人
发布于 2016/05/04 15:29
字数 349
阅读 16
收藏 0

又叫快照模式

捕获一个对象的内部状态,以可以还原这个对象的状态。

场景1:需要undo操作的时候,可以在操作之前备份,失败后恢复操作之前的状态


例1

 #include "PublicHeaders.h"
#pragma  once

#include <string>



class Memento
{
public:
	Memento(const std::string & state)
	{
		this->state = state;
	}
	void setState(const std::string& state)
	{
		this->state = state;
	}

	const std::string getState()const
	{
		return state;
	}
private:

	std::string state;
};




class Originator
{
public:
	Memento* CreateMemento()
	{
		if (backup)
		{
			delete backup;
		}
		backup = new Memento(state);
		return backup;
	}

	void RestoreMemento()
	{
		this->state = backup->getState();
	}


	void RestoreMemento(Memento*mem)
	{
		this->state = mem->getState();
	}


	const std::string &getState()const
	{
		return state;
	}
	void setState(const std::string& state)
	{
		this->state = state;
	}

	void PrintState()
	{
		std::cout << state << std::endl;

	}

private:
	Memento *backup = nullptr;

	std::string state = "";
};


void testMemento()
{
	Originator * ori = new Originator;
	ori->setState("old");
	ori->PrintState();
	ori->CreateMemento();


	ori->setState("new");
	ori->PrintState();
	ori->RestoreMemento();
	ori->PrintState();
 
}

例2

SGZ游戏项目中,网络连接失败后恢复操作前的状态

-- [Comment]
-- callErrorCallback copy  recovery
-- 这3个函数是撤销更改
local function callErrorCallback()
    t:recovery()
end

local _copy = 0

function t:copy()
    _copy = clone(t)
end

function t:recovery()
    if _copy ~= 0 then

        t = _copy
    end
end



-- 本地数据转换为json ,便于上传服务器
function t:toJson()
end


-- [Comment]
-- 从json设置 数据 便于服务器下载后,处理
function t:setJson(m_json)
    if arg == "" then
        return
    end
end
 
 
-- [Comment]
-- 玩家执行了敏感操作,才会执行,客户端本地缓存
-- @private
t.need_upload = false  -- 需要上传数据到服务器
t.need_download = true -- 需要下载数据到客户端

。。。。。。。。。。。。


© 著作权归作者所有

梦想游戏人
粉丝 41
博文 461
码字总数 132517
作品 0
成都
私信 提问
设计模式16——Memento设计模式

Memento备忘录设计模式是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到以前保存的状态。Memento备忘录设计模式的结构如下: Memento备忘录设计模式有以下3个重要角...

小米米儿小
2014/01/24
102
0
设计模式笔录(二),设计模式有哪些

本人出道5年,学习、编程、再学习、再编程一路走过,只是在笔和纸留下些脚印,实感惭愧。现开始把自己学习到的心得,实践中的体会,一一贴在互联网上,大家互相学习、探讨,寻找一些技术朋友...

方旭
2011/03/31
772
0
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
158
0
Java设计模式系列一(前言)

说起设计模式,很多人都会觉得这个概念很熟悉,会想到单例模式、工厂模式等等,但是似乎又说不出来什么,说不上它的核心思想和设计原则。其实我们的项目中,为了代码复用,增加可维护性,很多...

Mooree
04/07
27
0
设计模式Java Design Pattern-工厂方法模式FactoryMethod

我的博客 一、 设计模式的分类 大体可以分为三类: 创建型模式(5个) 单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式 结构性模式(7个) 适配器模式、装饰器模式、代理模式、...

勇敢写信
2018/03/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 如果是个帅小伙你愿意和他出去吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《Ghost 》游戏《死亡搁浅》原声 《Ghost 》游戏(《死亡搁浅》原声) - Au/Ra / Alan Walker 手机党少年们想听歌,请使劲儿戳...

小小编辑
52分钟前
90
5
java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
16
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部