प्रकटीकरण: मैं event_aggregator
मणि
के मेंटेनर हूँ तुम कैसे दृष्टिकोण करना चाहते हैं पर निर्भर करता है समस्या आप संभावित रूप से एक घटना योग का उपयोग कर सकते हैं ator। इस तरह आप किसी निश्चित प्रकार के संदेशों को प्रकाशित कर सकते हैं और फिर अपनी ऑब्जेक्ट्स उन प्रकारों को सुन सकते हैं जिन्हें आप प्राप्त करना चाहते हैं। यह कुछ मामलों में सामान्य घटनाओं से बेहतर हो सकता है क्योंकि आप अपनी वस्तुओं के बीच बहुत ढीला युग्मन प्राप्त करते हैं। घटना निर्माता और श्रोता को दूसरे के संदर्भ को साझा करने की आवश्यकता नहीं है।
एक मणि है कि आप के साथ इस event_aggregator
कहा जाता है में मदद करता है नहीं है। इसके साथ आप निम्न कर सकते हैं:
#!/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
जानते हैं कि यह डिफ़ॉल्ट रूप से async है रहो, इसलिए यदि आप सिर्फ इस स्क्रिप्ट को निष्पादित स्क्रिप्ट घटनाओं पारित कर रहे हैं इससे पहले कि बाहर निकलने के हो सकता है। async व्यवहार उपयोग को अक्षम करने के लिए:
EventAggregator::Message.new("MessageType1", ["Some Stuff",2,3], false).publish
#The third parameter indicates async
उम्मीद है कि इस अपने मामले
मैं ऑब्जर्वर डिजाइन पैटर्न का उपयोग करना चाहते करने में सहायक हो सकता है। – Ash