یادگاری الگوی یک الگوی طراحی نرمافزار است که توانایی بازگرداندن یک شیء به حالت قبلی خود (خنثیسازی از طریق عقبگرد) را ممکن میسازد.
الگوی یادگاری با سه شی پیادهسازی میشود: پدیدآورنده، یک سرپرست و یک یادگاری. پدیدآورنده است شیی است که به یک وضعیت داخلی دارد. سرپرست میخواهد تغییری در پدیدآورنده بدهد اما میخواهد قادر به خنثیسازی تغییرش باشد. سرپرست اول از پدیدآورنده یک شی یادگاری میخواهد. سپس هر عمل (و یا دنباله ای از عملیات) را به انجام میرساند. برای برگشت به حالت قبل از عملیات، شی یادگاری را به پدیدآورنده برمیگرداند. یادگاری خود یک شی مات است، شیئی که سرپرست نمیتواند و نباید تغییر دهد.
"""
Memento pattern example.
"""
class Memento(object):
def __init__(self, state):
self._state = state
def get_saved_state(self):
return self._state
class Originator(object):
_state = ""
def set(self, state):
print("Originator: Setting state to", state)
self._state = state
def save_to_memento(self):
print("Originator: Saving to Memento.")
return Memento(self._state)
def restore_from_memento(self, memento):
self._state = memento.get_saved_state()
print("Originator: State after restoring from Memento:", self._state)
saved_states = []
originator = Originator()
originator.set("State1")
originator.set("State2")
saved_states.append(originator.save_to_memento())
originator.set("State3")
saved_states.append(originator.save_to_memento())
originator.set("State4")
originator.restore_from_memento(saved_states[0])