fork download
  1. # Возможно я слишком усложняю задачу, у которой должно быть решение проще, но как из класса передать во второй класс объект первого класса?
  2. # У меня есть класс, допустим, слушатель, который "подписывается" на класс эвент-мейкер. Когда эвент-мейкер собсна делает эвент мне надо слушателю передать время и значения эвента. Поиск по Notification паттерну нашел лишь вопросы по апишкам всяких фейсбуков и их уведомлений.
  3. # Единственное до чего я додумался, это при вызове метода subscribe_to класса Listener записывать в переменную-массив класса Eventmaker текущий объект класса Listener, а при создании эвента в классе Eventmaker проходить по массиву и передавать notification в каждый объект.
  4.  
  5. class Listener
  6. def call(event, time)
  7. puts "Got event: #{event.inspect} @ #{time.inspect}"
  8. end
  9. end
  10.  
  11. class EventMaker
  12. def initialize
  13. @subscribers = []
  14. end
  15.  
  16. def subscribe(listener)
  17. @subscribers << listener
  18.   end
  19.  
  20.   def publish(event)
  21.   time = Time.now
  22.  
  23.   @subscribers.each do |subscriber|
  24.   subscriber.call(event, time)
  25.   end
  26.   end
  27. end
  28.  
  29. listener = Listener.new
  30. publisher = EventMaker.new
  31.  
  32. publisher.subscribe(listener)
  33. publisher.publish('ruby is dead')
Success #stdin #stdout 0s 28224KB
stdin
Standard input is empty
stdout
Got event: "ruby is dead" @ 2019-04-20 14:29:41 +0000