-
Notifications
You must be signed in to change notification settings - Fork 31
/
template_method1.rb
75 lines (55 loc) · 1.26 KB
/
template_method1.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# template_method1.rb
# Defines the skeleton of an algorithm in an operation, deferring some steps
# to subclasses. Let subclasses redefine certain steps of an algorithm without
# changing the algorithm's structure.
# 1. template
module AlgorithmTemplate
# These methods are "primitive operations" and must be overridden in the concrete templates
def step1
raise 'Called abstract method: step1'
end
def step2
raise 'Called abstract method: step2'
end
def step3
raise 'Called abstract method: step3'
end
# The "template method" - calls the concrete class methods, is not overridden
def some_template_method
step1
step2
step3
end
end
# 2. adding template behavior
class MyAlgorithmTemplate1
include AlgorithmTemplate
protected
def step1
puts 'algorithm1: step1'
end
def step2
puts 'algorithm1: step2'
end
def step3
puts 'algorithm1: step3'
end
end
class MyAlgorithmTemplate2
include AlgorithmTemplate
protected
def step1
puts 'algorithm2: step1'
end
def step2
puts 'algorithm2: step2'
end
def step3
puts 'algorithm2: step3'
end
end
# test
template1 = MyAlgorithmTemplate1.new
template2 = MyAlgorithmTemplate2.new
template1.some_template_method
template2.some_template_method