-
Notifications
You must be signed in to change notification settings - Fork 0
/
d3e03_observer.rb
52 lines (40 loc) · 1.26 KB
/
d3e03_observer.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class Payroll
def update(changed_employee) #update (es un ducktype y se puede llamar como queramos mientras que se llame igual en cada metodo)
# sirve para ejecutar los metodos de cada clase, cada vez que la clase Employee se modifica
puts("Cut a new check for #{changed_employee.name}!")
puts("His salary is now #{changed_employee.salary}!")
end
end
class Manager
def update(employee)
puts("Oh! We're wasting a lot of moneeey!!")
end
end
class HHRR
def update(employee)
puts "I'm sending an email!"
end
end
class Employee
attr_reader :name, :title, :salary, :manager # gracias al attr_reader podemos utilizar estas variables
def initialize(name, title, salary)
@name = name
@title = title
@salary = salary
@observer_list = []
end
def add_observer(observer)
@observer_list << observer
end
def salary=(new_salary)
@salary = new_salary
@observer_list.each do |observer|
observer.update(self)# self se utiliza para referirse al objeto en sí mismo, cualquiera que sea el parametro
end
end
end
fred = Employee.new('Fred', 'Crane Operator', 30000)
fred.add_observer Payroll.new
fred.add_observer Manager.new
fred.add_observer HHRR.new
fred.salary = 35000