Created
April 4, 2014 19:27
-
-
Save jolisper/9981537 to your computer and use it in GitHub Desktop.
Implementación del patrón template method usando prototipos
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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