C++디자인 모드 의 비망록 모드(Memento)

실제 응용 에서 취소 체 제 를 제공 해 야 할 때 대상 이 추가 작업 에서 내부 상 태 를 회복 해 야 할 때 비망록 모드 를 사용 해 야 합 니 다.그 본질은 대상 의 직렬 화 와 반 직렬 화 과정 으로 스크롤 백 작업 을 지원 하 는 것 이다.
역할.
패 키 징 성 을 파괴 하지 않 는 전제 에서 대상 의 내부 상 태 를 포착 하고 이 대상 외 에 이 상 태 를 저장 하면 나중에 대상 을 원래 의 상태 로 회복 할 수 있다.
클래스 보기

이루어지다

typedef struct sysstate; //        ,        

//   
class Memento
{
public:
 Memento(sysstate &statein)
 {
  state = statein;
 }
 sysstate& getstate(){ return state}
private:
 sysstate state;
};

//    
class system
{
public:
 void recovery(Memento* pMem)
 {
  if (pMem)
  {
   state = pMem->getstate();
  }  
 }
 Memento* backup()
 {
  return new Memento(state);
 }
private:
 sysstate state;
};

//     
class recoveryControl
{
public:
 ~recoveryControl()
 {
  map<long,Memento*>::iterator iter; 
  for ( iter = m_mementos.begin(); iter != m_mementos.end(); iter++)
  {
   delete iter.second;
  }
 }
 long addRecoveryPoint(Memento* pMem)
 {
  long t = clock();
  m_mementos.instert(pair<long,Memento*>(t, pMem));
  return t;
 }
 Memento* GetRecoveryPoint(long time)
 {
  map<long,Memento*>::iterator iter; 
 
  iter = m_mementos.find(time); 
 
  if(iter != m_mementos.end()) 
   return iter->second; 
  return NULL;
 }
 void DelRecoveryPoint(long time)
 {
  Memento* pMem = GetRecoveryPoint(time);
  m_mementos.erase(time);  
  delete pMem;
 }
private:
 map<long,Memento*> m_mementos;
};

int main()
{
 system Sys;
 recoveryControl controler;
 //             
 long time1 = controler.addRecoveryPoint(Sys.backup());
 long time2 = controler.addRecoveryPoint(Sys.backup());

 //      time1  
 Sys.recovery(controler.GetRecoveryPoint(time1));

 //      time2  
 Sys.recovery(controler.GetRecoveryPoint(time2));

}

응용 장면
게임 압축 파일,트 랜 잭 션 스크롤 백,프로그램의 취소 와 복구 작업 등 스크롤 백 작업 을 지원 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기