Skip to content

Instantly share code, notes, and snippets.

@takaheraw
Created March 7, 2012 12:53
Show Gist options
  • Save takaheraw/1992938 to your computer and use it in GitHub Desktop.
Save takaheraw/1992938 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
# coding: utf-8
module Subject
def initialize
@observers = []
end
def add_observer(&observer)
@observers << observer
end
def delete_observer(observer)
@observers.delete(observer)
end
def notify_observers
@observers.each do |observer|
observer.call(self)
end
end
end
class Employee
include Subject
attr_accessor :name, :title, :salary
def initialize(name, title, salary)
super()
@name = name
@title = title
@salary = salary
end
def salary=(new_salary)
@salary = new_salary
notify_observers
end
end
fred = Employee.new("Fred", "Operator", 20000)
fred.add_observer do |changed_employee|
puts "#{changed_employee.name}"
puts "#{changed_employee.salary}"
end
fred.salary = 30000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment