您当前的位置: 首页 > 

phymat.nico

暂无认证

  • 3浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

设计模式-行为-备忘录

phymat.nico 发布时间:2017-10-07 20:25:14 ,浏览量:3

#pragma once

#ifndef MEMENTO_H 

#define MEMENTO_H 

#include  

typedef std::string State; 

class Memento; 

class Originator 
{ 
public: 
	Originator(const State& rState); 
	Originator(); 
	~Originator(); 
	Memento*  CreateMemento(); 
	void      SetMemento(Memento* pMemento); 
	State     GetState(); 
	void      SetState(const State& rState); 
	void      RestoreState(Memento* pMemento); 
	void      PrintState(); 

private: 
	State      m_State; 
}; 

// 把Memento 的接口函数都设置为私有的,而Originator 是它的友元, 
// 这样保证了只有Originator 可以对其访问 
class Memento 
{ 
private: 
	friend class Originator; 
	Memento(const State& rState); 
	void   SetState(const State& rState); 
	State  GetState(); 
	State  m_State; 
}; 

#endif 
#include "StdAfx.h"
#include "memento_impl.h"

#include  

Originator::Originator() 
{ 
} 

Originator::Originator(const State& rState) 
: m_State(rState) 
{ 
} 

Originator::~Originator() 
{ 
} 

State Originator::GetState() 
{ 
	return m_State; 
} 

void Originator::SetState(const State& rState) 
{ 
	m_State = rState; 
} 

Memento* Originator::CreateMemento() 
{ 
	return new Memento(m_State); 
} 

void Originator::RestoreState(Memento* pMemento) 
{ 
	if (NULL != pMemento) 
	{ 
		m_State = pMemento->GetState(); 
	} 
} 

void Originator::PrintState() 
{ 
	std::cout SetState("new state"); 

	pOriginator->PrintState(); 
	// 通过备忘录把原发器的状态还原到之前的状态 
	pOriginator->RestoreState(pMemento); 

	pOriginator->PrintState(); 

	delete pOriginator; 
	delete pMemento;
	system("pause");

	return 0;
}

关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.1291s