C++实现备忘录模式

本文通过一个简单的示例介绍了如何在 C++ 中使用备忘录模式,该模式用于在不破坏封装性的情况下保存和恢复对象的内部状态。代码展示了 Originator 类、Memento 类和 CareTaker 类的角色及其相互作用。

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

/*
	备忘录模式:在不破坏一个对象的封装性的前提下,获取一个对象的内部状态,并将其保存在对象之外,
	使得对象可以恢复到原先保存的状态。
	Created by Phoenix_FuliMa
*/

#include <iostream>
#include <string>
using namespace std;

class Memento
{
private:
	string state;

public:
	Memento(string state)
		:state(state)
	{}
	string GetState()
	{
		return state;
	}
	void SetState(string state)
	{
		this->state = state;
	}
};

class CareTaker
{
private:
	Memento *memento;

public:
	void SetMemento(Memento *memento)
	{
		this->memento = memento;
	}
	Memento* GetMemento()
	{
		return this->memento;
	}
};

class Originator
{
private:
	string state;
	
public:
	Originator(string state)
	{
		this->state = state;
	}

	void RestoreMemento(Memento *memento)
	{
		state = memento->GetState();
	}

	Memento *CreateMemento()
	{
		return new Memento(state);
	}

	void SetState(string state)
	{
		this->state = state;
	}

	void  ShowState()
	{
		cout<< this->state <<endl;
	}
};

int main()
{
	Originator *originator = new Originator("2012年11月11日,光棍节,一个人,没有女朋友");
	CareTaker  *caretaker  = new CareTaker();
	caretaker->SetMemento(originator->CreateMemento());
	
	cout<<"2012年11月11日,光棍节早晨的状态是:"<<endl;

	originator->ShowState();

	originator->SetState("中午参加同学婚礼去了,锦府盐帮饭店");
	originator->ShowState();

	cout<<"晚上回来的状态是"<<endl;
	originator->RestoreMemento(caretaker->GetMemento());
	originator->ShowState();

	cout<<"跟早晨一样,嗨"<<endl;

	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值