Design Patterns in Ruby
Observer Pattern
Copyright 2016. Jyaasa Technologies. All Right Reserved
http://jyaasa.com
Neha Suwal
Associate Software Engineer at
Jyaasa Technologies
Design Patterns
Design principles are core abstract principles which we are supposed to follow while
designing software architect
Observer Pattern:
● one object to inform other ‘interested’ objects when its state changes
The Observable module in the Ruby standard library provides the mechanism necessary
for us to implement this pattern, and it is fairly easy to use.
Example:
module Email
extend self
def send(subject, receiver)
mail to: “#{receiver}@example.com”, subject:
“#{subject}”
end
end
class Person
include Email
attr_reader :name
def initialize(name)
@name = name
end
def send_email(subject, receiver)
Email.send(subject, receiver)
end
end
bill = Person.new 'Bill'
bill.send_email 'Fishing Trip', 'Fred'
class Alert
def gotcha(person)
puts "!!! ALERT: #{person} SENT AN EMAIL !!!"
end
end
module Subject
attr_reader :observers
def initialize
@observers = []
end
def add_observer(*observers)
observers.each { |observer| @observers << observer }
end
private
def notify_observers
observers.each { |observer| observer.gotcha(self) }
end
end
class Person
include Email, Subject
attr_reader :name
def initialize(name)
# 'super' requires a parentheses because we're calling
# super on the superclass, 'Subject'
super()
@name = name
end
def send_email(subject, receiver)
Email.send(subject, receiver)
notify_observers
end
end
alert = Alert.new
bill = Person.new 'Bill'
bill.add_observer alert
bill.send_email 'Fishing Trip', 'Fred'
!!! ALERT: BILL SENT AN EMAIL !!!
THANK YOU!

Design patterns: observer pattern

  • 1.
    Design Patterns inRuby Observer Pattern Copyright 2016. Jyaasa Technologies. All Right Reserved http://jyaasa.com
  • 2.
    Neha Suwal Associate SoftwareEngineer at Jyaasa Technologies
  • 3.
    Design Patterns Design principlesare core abstract principles which we are supposed to follow while designing software architect
  • 4.
    Observer Pattern: ● oneobject to inform other ‘interested’ objects when its state changes The Observable module in the Ruby standard library provides the mechanism necessary for us to implement this pattern, and it is fairly easy to use.
  • 5.
    Example: module Email extend self defsend(subject, receiver) mail to: “#{receiver}@example.com”, subject: “#{subject}” end end class Person include Email attr_reader :name def initialize(name) @name = name end def send_email(subject, receiver) Email.send(subject, receiver) end end
  • 6.
    bill = Person.new'Bill' bill.send_email 'Fishing Trip', 'Fred'
  • 7.
    class Alert def gotcha(person) puts"!!! ALERT: #{person} SENT AN EMAIL !!!" end end
  • 8.
    module Subject attr_reader :observers definitialize @observers = [] end def add_observer(*observers) observers.each { |observer| @observers << observer } end private def notify_observers observers.each { |observer| observer.gotcha(self) } end end
  • 9.
    class Person include Email,Subject attr_reader :name def initialize(name) # 'super' requires a parentheses because we're calling # super on the superclass, 'Subject' super() @name = name end def send_email(subject, receiver) Email.send(subject, receiver) notify_observers end end
  • 10.
    alert = Alert.new bill= Person.new 'Bill' bill.add_observer alert bill.send_email 'Fishing Trip', 'Fred' !!! ALERT: BILL SENT AN EMAIL !!!
  • 11.