design patterns: observer pattern

11
Design Patterns in Ruby Observer Pattern Copyright 2016. Jyaasa Technologies. All Right Reserved http:// jyaasa.com

Upload: jyaasa-technologies

Post on 13-Apr-2017

139 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Design patterns: observer pattern

Design Patterns in Ruby

Observer Pattern

Copyright 2016. Jyaasa Technologies. All Right Reserved

http://jyaasa.com

Page 2: Design patterns: observer pattern

Neha SuwalAssociate Software Engineer at Jyaasa Technologies

Page 3: Design patterns: observer pattern

Design Patterns

Design principles are core abstract principles which we are supposed to follow while designing software architect

Page 4: Design patterns: observer pattern

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.

Page 5: Design patterns: observer pattern

Example:module Email extend self

def send(subject, receiver) mail to: “#{receiver}@example.com”, subject: “#{subject}” endend

class Person include Email attr_reader :name

def initialize(name) @name = name end

def send_email(subject, receiver) Email.send(subject, receiver) endend

Page 6: Design patterns: observer pattern

bill = Person.new 'Bill'bill.send_email 'Fishing Trip', 'Fred'

Page 7: Design patterns: observer pattern

class Alert def gotcha(person) puts "!!! ALERT: #{person} SENT AN EMAIL !!!" endend

Page 8: Design patterns: observer pattern

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) } endend

Page 9: Design patterns: observer pattern

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 endend

Page 10: Design patterns: observer pattern

alert = Alert.new

bill = Person.new 'Bill'

bill.add_observer alert

bill.send_email 'Fishing Trip', 'Fred' !!! ALERT: BILL SENT AN EMAIL !!!

Page 11: Design patterns: observer pattern

THANK YOU!