设计模式(4)--对象行为(6)--备忘录

这篇具有很好参考价值的文章主要介绍了设计模式(4)--对象行为(6)--备忘录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 意图

    在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

    这样以后可以将该对象恢复到原先保存的状态。

2. 三种角色

   原发器(Originator)、备忘录(Memento)、负责人(Caretaker)

3. 优点

   3.1 保持了封装边界。屏蔽了原发器的内部信息。

   3.2 简化了原发器。 

4. 缺点

    4.1 可能代价很高。

    当生成备忘录必须拷贝并存储大量信息时,或非常频繁地创建备忘录和恢复原发器状态。

    4.2 在一些语言中可能难于保证只有原发器可访问备忘录的状态。

    4.3 维护备忘录的潜在代价。可能产生大量的存储开销。

5. 相关模式

    5.1 命令模式可使用备忘录来为可撤销的操作维护状态。

    5.2 备忘录可用于迭代器存储状态。 

6. 代码示意(C++)
#pragma once
#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Mememto
{
	string m_state;
public:
	Mememto(const string& state) {
		m_state = state;
	}
	string GetState() {
		return m_state;
	}
	void SetState(const string& state) {
		m_state = state;
	}

};

class Originator
{
	string m_state;
public:
	Mememto* CreateMememto() {
		return new Mememto(m_state);
	}
	void SetMememto(Mememto* pMememto) {
		m_state = pMememto->GetState();
	}
	void SetState(const string& state) {
		m_state = state;
	}
	void ShowState() {
		cout << "state:" << m_state << endl;
	}
};

class CareTaker
{
	Mememto* m_pMememto;
public:
	CareTaker(Mememto* pMememto) {
		m_pMememto = pMememto;
	}
	~CareTaker() {
		delete m_pMememto;
	}
	Mememto* GetMememto() {
		return m_pMememto;
	}
};
#include "Mememto.h"
int main() {
	Originator* pOriginator = new Originator();
	pOriginator->SetState("on");
	pOriginator->ShowState();

	CareTaker taker(pOriginator->CreateMememto());

	pOriginator->SetState("off");
	pOriginator->ShowState();

	pOriginator->SetMememto(taker.GetMememto());
	pOriginator->ShowState();

	delete pOriginator;
	return 0;
}

运行结果:

设计模式(4)--对象行为(6)--备忘录,设计模式,设计模式 

 6.1 Originator通过Mememto来保存真实的内部状态,不保留历史状态(3.2)。

 6.2 Caretaker持有有历史状态的Mememto指针,但不关注其内部状态(3.1)。文章来源地址https://www.toymoban.com/news/detail-767071.html

到了这里,关于设计模式(4)--对象行为(6)--备忘录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式-备忘录模式

    备忘录模式(Memento Pattern)是计算机科学中的一种行为设计模式。它提供了一种在不破坏封装性的前提下,捕获和恢复对象内部状态的方法。这种模式主要用于在用户需要回滚到对象的某个先前状态时,能够实现状态的还原。 在备忘录模式中,主要涉及到三个角色: Origina

    2024年01月23日
    浏览(48)
  • 【设计模式】备忘录模式

    主页传送门: 💁 传送        备忘录(Memento Pattern)模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。。其定义如下: Without violating encapsulation,capture and externalize an object’s internal state so that the object can be restored to this state later.        即:在不破坏封

    2024年02月07日
    浏览(52)
  • 设计模式——备忘录模式

    备忘录模式(Memento Pattern)是一种行为型设计模式,它在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样可以在需要时将对象恢复到先前的状态。 发起人(Originator): 是拥有复杂内部状态的对象,它可以创建和恢复备忘录。 备忘录(M

    2024年01月19日
    浏览(43)
  • 【前端设计模式】之备忘录模式

    设计模式是在软件开发中经过验证的解决问题的方法。它们是从经验中总结出来的,可以帮助我们更好地组织和管理代码,提高代码的可维护性、可扩展性和可重用性。无论是前端还是后端开发,设计模式都扮演着重要的角色。在本专栏中,我们将探索一些常见的前端设计模

    2024年02月05日
    浏览(43)
  • Java设计模式-备忘录模式

    一、概述 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件都提供了撤销(Undo)操作,如 Word、记事本、Photoshop、IDEA等软件在编辑时按 Ctrl+Z

    2024年01月21日
    浏览(51)
  • 设计模式(十八)备忘录

    在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以在以后将对象恢复到原先保存的状态。备忘录模式是一种对象行为型模式,其别名为标记(Token)模式。 备忘录模式的核心在于备忘录类以及用于管理备忘录的负责人类的设计,包

    2024年02月04日
    浏览(44)
  • C++ 设计模式之备忘录模式

    【声明】本题目来源于卡码网(题目页面 (kamacoder.com)) 【提示:如果不想看文字介绍,可以直接跳转到C++编码部分】         -- 什么是备忘录模式  (第17种模式)          备忘录模式 (Memento Pattern)是⼀种 ⾏为型设计模式 ,它允许在不暴露对象实现的情况下捕获对

    2024年01月20日
    浏览(50)
  • 《设计模式的艺术》笔记 - 备忘录模式

            备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为模式,别名为Token。 myclass.h myclass.cpp main.cpp         1. 它提供了一种状态恢复的实现机制,使得用户可

    2024年01月24日
    浏览(62)
  • 03-JAVA设计模式-备忘录模式

    Java中的备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后可以将对象恢复到原先保存的状态。 主要角色包括: 发起者(Originator):需要保存和恢复状态的对象。它记录当前

    2024年04月26日
    浏览(43)
  • 设计模式——备忘录模式(Memento Pattern)

    类型: 行为型模式 目的: 保存一个对象的某个状态,以便在适当的时候恢复对象。 使用场景: 1、需要保存/恢复数据的相关状态场景。 2、提供一个可回滚的操作。 2.1.1 定义副本类 2.1.2 定义对象 菜鸟的例子定义Originator 对象的同时,还提供saveStateToMemento、getStateFromMemento的

    2024年02月06日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包