Skip to content

Instantly share code, notes, and snippets.

@jolisper
Created April 4, 2014 19:27
Show Gist options
  • Save jolisper/9981537 to your computer and use it in GitHub Desktop.
Save jolisper/9981537 to your computer and use it in GitHub Desktop.
Implementación del patrón template method usando prototipos
# Probado en Ruby 1.9.3
#############################################################
# Implementación del patrón template method usando prototipos
#############################################################
# perro es el prototipo de los otros objetos
perro = Object.new
# Nota: define_singleton_method define un
# método a un objeto específico
perro.define_singleton_method(:ladrar) do
3.times do
ladrar_especifico
end
end
perro.define_singleton_method(:ladrar_especifico) do
raise NotImplementedError, "ladrar_especifico no implementado"
end
# Perros específicos
bulldog = perro.clone
bulldog.define_singleton_method(:ladrar_especifico) do
puts "GUAU!"
end
chiguagua = perro.clone
chiguagua.define_singleton_method(:ladrar_especifico) do
puts "guau!"
end
bobby = perro.clone
bobby.define_singleton_method(:ladrar_especifico) do
puts "(Bobby se hace el muerto...)"
end
chiguagua.ladrar
#=> guau!
#=> guau!
#=> guau!
bulldog.ladrar
#=> GUAU!
#=> GUAU!
#=> GUAU!
bobby.ladrar
#=> (Bobby se hace el muerto...)
#=> (Bobby se hace el muerto...)
#=> (Bobby se hace el muerto...)
# Muestra la linea de herencia
p bobby.class.ancestors
#=> [Object, Kernel, BasicObject]
perro.ladrar
#=> template-prototipico.rb:16:in `block in <main>': ladrar_especifico no implementado (NotImplementedError)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment