设计模式之十七------Memento(备忘录)

本文介绍了一种软件设计模式——备忘录模式,通过三个关键类:Originator、Memento 和 Caretaker 的配合,实现了对象状态的保存与恢复功能。文章通过具体的 C++ 实现代码展示了如何应用此模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


问题:

在状态转换过程中,可能由于某种原因需要恢复到之前的状态;这就需要们保存对象的状态;

但是应该怎么实现呢?

解决方案:

需要三个类来解决这个问题:

Originator

备忘发起角色创建一个备忘录,用以记录当前时刻它的内部状态。在需要时使用备忘录恢复内部状态。  

Memento备忘录角色存储备忘发起角色的内部状态。 

Caretaker负责保存好备忘录。不能对备忘录的内容进行操作或检查。

   
#include <IOSTREAM>
#include <STRING>
using namespace std;
class Originator;
class Memento{
public:
	~Memento(){}
private:
	friend Originator;
	Memento(){}
	Memento(const string &str)
	{
		state=str;
	}	
	const string & GetState()
	{
		return state;
	}
	void SetState(const string &str)
	{
		state=str;
	}
	string state;
	
};
class Originator{
public:
	Originator(){}
	Originator(const string &str){state=str;}
	~Originator(){}
	Memento *CreateMement()
	{
		return new Memento(state);
	}
	void RestoreMemento(Memento *mem)
	{
		state=mem->GetState();
	}
	void PrintState()
	{
		cout<<"当前状态:"<<state<<endl;
	}
	const string & GetState()
	{
		return state;
	}
	void SetState(const string &str)
	{
		state=str;
	}
private:
	string state;
};

class CareTaker{
public:
	CareTaker(){memento=NULL;}
	CareTaker(Memento *mem)
	{
		memento=mem;
	}
	void SetMemento(Memento *mem)
	{
		memento=mem;
	}
	Memento *GetMemento()
	{
		return memento;
	}
	~CareTaker(){
	}
private:
	Memento *memento;
};
void main()
{
	Originator *orig=new Originator("HI");
	Memento *mem=orig->CreateMement();
	CareTaker *care=new CareTaker(mem);
	orig->PrintState();
	orig->SetState("BYE");
	orig->PrintState();
	orig->RestoreMemento(care->GetMemento());
	delete mem;
	orig->PrintState();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值