Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

The Observer pattern provides a simple mechanism for one object to inform a set of interested third-party objects when its state changes.

License

NotificationsYou must be signed in to change notification settings

ruby/observer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

The Observer pattern (also known as publish/subscribe) provides a simplemechanism for one object to inform a set of interested third-party objectswhen its state changes.

Mechanism

The notifying class mixes in the +Observable+module, which provides the methods for managing the associated observerobjects.

The observable object must:

  • assert that it has +#changed+
  • call +#notify_observers+

An observer subscribes to updates using Observable#add_observer, which alsospecifies the method called via #notify_observers. The default method fornotify_observers is #update.

Installation

Add this line to your application's Gemfile:

gem'observer'

And then execute:

$ bundle

Or install it yourself as:

$ gem install observer

Usage

The following example demonstrates this nicely. A +Ticker+, when run,continually receives the stock +Price+ for its@symbol. A +Warner+is a general observer of the price, and two warners are demonstrated, a+WarnLow+ and a +WarnHigh+, which print a warning if the price is below orabove their set limits, respectively.

The +update+ callback allows the warners to run without being explicitlycalled. The system is set up with the +Ticker+ and several observers, and theobservers do their duty without the top-level code having to interfere.

Note that the contract between publisher and subscriber (observable andobserver) is not declared or enforced. The +Ticker+ publishes a time and aprice, and the warners receive that. But if you don't ensure that yourcontracts are correct, nothing else can warn you.

require"observer"classTicker### Periodically fetch a stock price.includeObservabledefinitialize(symbol)@symbol=symbolenddefrunlast_price=nilloopdoprice=Price.fetch(@symbol)print"Current price:#{price}\n"ifprice !=last_pricechanged# notify observerslast_price=pricenotify_observers(Time.now,price)endsleep1endendendclassPrice### A mock class to fetch a stock price (60 - 140).defself.fetch(symbol)60 +rand(80)endendclassWarner### An abstract observer of Ticker objects.definitialize(ticker,limit)@limit=limitticker.add_observer(self)endendclassWarnLow <Warnerdefupdate(time,price)# callback for observerifprice <@limitprint"---#{time.to_s}: Price below #@limit:#{price}\n"endendendclassWarnHigh <Warnerdefupdate(time,price)# callback for observerifprice >@limitprint"+++#{time.to_s}: Price above #@limit:#{price}\n"endendendticker=Ticker.new("MSFT")WarnLow.new(ticker,80)WarnHigh.new(ticker,120)ticker.run

Produces:

Current price: 83Current price: 75--- Sun Jun 09 00:10:25 CDT 2002: Price below 80: 75Current price: 90Current price: 134+++ Sun Jun 09 00:10:25 CDT 2002: Price above 120: 134Current price: 134Current price: 112Current price: 79--- Sun Jun 09 00:10:25 CDT 2002: Price below 80: 79

Development

After checking out the repo, runbin/setup to install dependencies. Then, runrake test to run the tests. You can also runbin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, runbundle exec rake install. To release a new version, update the version number inversion.rb, and then runbundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the.gem file torubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub athttps://github.com/ruby/observer.

About

The Observer pattern provides a simple mechanism for one object to inform a set of interested third-party objects when its state changes.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors10


[8]ページ先頭

©2009-2026 Movatter.jp