Revelación: Yo soy el mantenedor de la event_aggregator
joya
Dependiendo de cómo desea acercarse a la problema que podría utilizar un evento aggreg ator. De esta forma puede publicar mensajes de un tipo determinado y luego hacer que sus objetos escuchen los tipos que desea que reciban. En ciertos casos, esto puede ser mejor que los eventos normales porque se obtiene un acoplamiento muy flexible entre los objetos. El productor y el oyente del evento no necesitan compartir una referencia con el otro.
Hay una joya que te ayuda con esto llamado event_aggregator
. Con él se pueden realizar las siguientes acciones:
#!/usr/bin/ruby
require "rubygems"
require "event_aggregator"
class Foo
include EventAggregator::Listener
def initialize()
message_type_register("MessageType1", lambda{|data| puts data })
message_type_register("MessageType2", method(:handle_message))
end
def handle_message(data)
puts data
end
def foo_unregister(*args)
message_type_unregister(*args)
end
end
class Bar
def cause_event
EventAggregator::Message.new("MessageType1", ["Some Stuff",2,3]).publish
end
def cause_another_event
EventAggregator::Message.new("MessageType2", ["Some More Stuff",2,3]).publish
end
end
f = Foo.new
b = Bar.new
b.cause_event
b.cause_another_event
# => Some Stuff
2
3
# => Some More Stuff
2
3
ser consciente de que es asíncrono de forma predeterminada, por lo que si se ejecuta este script solo el guión podría salir antes de que se pasan los acontecimientos. Para deshabilitar el uso asíncrono comportamiento:
EventAggregator::Message.new("MessageType1", ["Some Stuff",2,3], false).publish
#The third parameter indicates async
Esperemos que esto puede ser útil en su caso
quiero utilizar el patrón de diseño Observer. – Ash