-
Notifications
You must be signed in to change notification settings - Fork 13
/
03_observer_sample.rb
47 lines (40 loc) · 1.4 KB
/
03_observer_sample.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
# -*- coding: utf-8 -*-
require 'observer'
# 従業員を表す
class Employee
include Observable # Observerとして働く
attr_reader :name, :title, :salary
def initialize(name, title, salary)
@name = name
@title = title
@salary = salary
add_observer(Payroll.new)
add_observer(TaxMan.new)
end
# 給与をセットして、ConcreteObserverに通知する
def salary=(new_salary)
@salary = new_salary
changed
notify_observers(self)
end
end
# 給与の小切手の発行を行う(ConcreteObserver)
class Payroll
def update(changed_employee)
puts "彼の給料は#{changed_employee.salary}になりました!#{changed_employee.title}のために新しい小切手を切ります。"
end
end
# 税金の請求書の発行を行う(ConcreteObserver)
class TaxMan
def update(changed_employee)
puts "#{changed_employee.name}に新しい税金の請求書を送ります。"
end
end
# ===========================================
john = Employee.new('John', 'Senior Vice President', 5000)
john.salary = 6000
#=> 彼の給料は6000になりました!Senior Vice Presidentのために新しい小切手を切ります。
#=> Johnに新しい税金の請求書を送ります。
john.salary = 7000
#=> 彼の給料は7000になりました!Senior Vice Presidentのために新しい小切手を切ります。
#=> Johnに新しい税金の請求書を送ります。