Last active
December 11, 2015 10:39
-
-
Save mjansen401/4588620 to your computer and use it in GitHub Desktop.
Observer pattern example in Ruby, using stocks and stock tickers
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
class Stock | |
def initialize(symbol) | |
@symbol = symbol | |
@observers = [] | |
end | |
def register_observer(observer) | |
@observers << observer | |
end | |
def remove_observer(observer) | |
@observers.delete(observer) | |
end | |
def notify | |
new_price = rand(500) | |
@observers.each do |observer| | |
observer.notify(@symbol, new_price) | |
end | |
end | |
end | |
class StockTicker | |
def notify(symbol, price) | |
puts "#{symbol}- #{price}" | |
end | |
end | |
class OldTimeyStockTicker | |
def notify(symbol, price) | |
puts "Ye old symbol and price - #{symbol}, #{price}" | |
end | |
end | |
## an example of using stocks and tickers as subjects and observers | |
stock = Stock.new("8L") | |
ticker = StockTicker.new | |
old_timey = OldTimeyStockTicker.new | |
stock.register_observer(ticker) | |
stock.register_observer(old_timey) | |
20.times do | |
stock.notify | |
sleep 0.3 | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment