-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstrategy_pattern2.rb
56 lines (46 loc) · 1.45 KB
/
strategy_pattern2.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
52
53
54
55
56
=begin
Стратегия (англ. Strategy) — поведенческий шаблон проектирования,
предназначенный для определения семейства алгоритмов,
инкапсуляции каждого из них и обеспечения их взаимозаменяемости.
Это позволяет выбирать алгоритм путем определения соответствующего класса.
Шаблон Strategy позволяет менять выбранный алгоритм независимо
от объектов-клиентов, которые его используют.
=end
def net_salary(amount, country)
taxes = case country
when 'Russia'
(amount * 0.05) + 313
when 'USA'
(amount * 0.02) + 100
when 'Poland'
amount * 0.03
else
0
end
amount - taxes
end
p net_salary(1000, 'Russia')
p net_salary(1000, 'Efiopia')
class RusTaxes
def self.taxes(amount)
(amount * 0.05) + 313
end
end
class USATaxes
def self.taxes(amount)
(amount * 0.2) + 100
end
end
class Taxes
def initialize
@strategies = {}
@strategies['Russia'] = RusTaxes
@strategies['USA'] = USATaxes
end
def net_salary(amount, country)
strategy = @strategies[country]
strategy ? amount - strategy.taxes(amount) : amount
end
end
p Taxes.new.net_salary(1000, 'USA')
p Taxes.new.net_salary(1000, 'Belarus')