Skip to content

Instantly share code, notes, and snippets.

@hexgnu
Created August 3, 2011 23:35
Show Gist options
  • Save hexgnu/1124151 to your computer and use it in GitHub Desktop.
Save hexgnu/1124151 to your computer and use it in GitHub Desktop.
Memento Pattern
class Originator
def state=(state)
puts "Originator: setting state to " + state
@state = state
end
def save_to_memento
puts "Originator: Saving to memento."
Memento.new(@state)
end
def restore_from_memento(memento)
state = memento.saved_state
puts "Originator: State after restoring from Memento: " + state
end
class Memento
attr_reader :saved_state
def initialize(state)
@saved_state = state
end
end
end
class Caretaker
def initialize(args = [])
saved_states = []
originator = Originator.new
originator.state = "State1"
originator.state = "State2"
saved_states << originator.save_to_memento
originator.state = "State3"
saved_states << originator.save_to_memento
originator.state = "State4"
originator.restore_from_memento(saved_states[1])
end
end
Caretaker.new
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment