面向对象设计模式之备忘录模式

18、备忘录模式(Memento)

使用场景:

a) 需要保存/恢复数据相关状态场景。
b) 提供一个可回滚的操作

优点:

a) 给用户提供了一种可以恢复或回到特定历史状态的机制
b) 实现了信息的封装,使得用户不需要关心状态的保存细节

缺点:

资源消耗大。如果要保存的内部状态信息过多或者特别频繁,将会占用比较大的内存资源

模式结构:

a) 发起人角色(Originator):记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。
b) 备忘录角色(Memento):负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
c) 管理者角色(Caretaker):对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。
在这里插入图片描述

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;
//备忘录
class Memento {
private:
	string state;
public:
	Memento(string state) {
		this->state = state;
	}
	void setState(string state) {
		this->state = state;
	}
	string getState() {
		return state;
	}
};
//发起人
class Originator {
private:
	string state;
public:
	void setState(string state) {
		this->state = state;
	}
	string getState() {
		return state;
	}
	Memento* createMemento() {
		return new Memento(state);
	}
	void restoreMemento(Memento *m) {
		this->setState(m->getState());
	}
};
//管理者
class Caretaker {
private:
	Memento *memento;
public:
	void setMemento(Memento *m) {
		memento = m;
	}
	Memento *getMemento() {
		return memento;
	}
};

int main()
{
	Originator *or = new Originator();
	Caretaker *cr = new Caretaker();
	or->setState("S0");
	cout << "初始状态:" + or->getState() << endl;
	cr->setMemento(or->createMemento()); //保存状态
	or->setState("S1");
	cout << "新的状态:" + or->getState() << endl;
	or->restoreMemento(cr->getMemento()); //恢复状态
	cout << "恢复状态:" + or->getState() << endl;
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值