320x100
구조
#pragma once
#include <iostream>
#include <string>
class Memento
{
private:
const std::string str1_;
const std::string str2_;
public:
Memento(std::string& str1, std::string& str2)
: str1_(str1)
, str2_(str2)
{
}
const std::string& getStr1() const
{
return str1_;
}
const std::string& getStr2() const
{
return str2_;
}
};
class Originator
{
private:
std::string str1_;
std::string str2_;
public:
Originator(const char* str1, const char* str2)
{
str1_ = str1;
str2_ = str2;
}
Memento* createMemento()
{
return new Memento(str1_, str2_);
}
void setMememto(Memento* memento)
{
str1_ = memento->getStr1();
str2_ = memento->getStr2();
}
void set(const char* str1, const char* str2)
{
str1_ = str1;
str2_ = str2;
}
};
class Caretaker
{
public:
Caretaker(Originator* originator)
{
memento_ = originator->createMemento();
originator->setMememto(memento_);
}
Memento* getMemento()
{
return memento_;
}
private:
Memento* memento_;
};
사용
int main()
{
Originator* original = new Originator("First", "One");
Caretaker* caretaker = new Caretaker(original);
// 새로운 상태
original->set("Second", "Two");
// 이전 상태로 복구
original->setMememto(caretaker->getMemento());
system("pause");
return 0;
}
특정 객체(originator)의 상태(Memento)를 다른 곳(Caretaker)에 저장해두고 다른 값으로 사용하다가, 필요할 떄 복구할 수 있는 패턴이다.
320x100
'프로그래밍 > GoF' 카테고리의 다른 글
[행동 패턴] - 상태(State) (0) | 2022.01.08 |
---|---|
[행동 패턴] - 감시자(Observer) (0) | 2022.01.08 |
[행동 패턴] - 반복자(Iterator) (0) | 2022.01.06 |
[행동 패턴] - 해석자(Interpreter) (0) | 2022.01.06 |
[행동 패턴] - 명령(Command) (0) | 2022.01.05 |