-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy path01_template_method_sample.rb
81 lines (69 loc) · 1.69 KB
/
01_template_method_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
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
76
77
78
79
80
81
class Report
def initialize
@title = "report title"
@text = ["report line 1", "report line 2", "report line 3"]
end
# レポートの出力手順を規定
def output_report
output_start
output_body
output_end
end
# レポートの先頭に出力
def output_start
end
# レポートの本文の管理
def output_body
@text.each do |line|
output_line(line)
end
end
# 本文内のLINE出力部分
# 今回は個別クラスに規定するメソッドとする。規定されてなければエラーを出す
def output_line(line)
raise 'Called abstract method !!'
end
# レポートの末尾に出力
def output_end
end
end
# HTML形式でのレポート出力を行う
class HTMLReport < Report
# レポートの先頭に出力
def output_start
puts "<html><head><title>#{@title}</title></head><body>"
end
# 本文内のLINE出力部分
def output_line(line)
puts "<p>#{line}</p>"
end
# レポートの末尾に出力
def output_end
puts '</body></html>'
end
end
# PlainText形式(<code>*****</code>で囲う)でレポートを出力
class PlainTextReport < Report
# レポートの先頭に出力
def output_start
puts "**** #{@title} ****"
end
# レポートの末尾に出力
def output_line(line)
puts line
end
end
# ===========================================
html_report = HTMLReport.new
html_report.output_report
#<html><head><title>report title</title></head><body>
#<p>report line 1</p>
#<p>report line 2</p>
#<p>report line 3</p>
#</body></html>
plain_text_report = PlainTextReport.new
plain_text_report.output_report
#**** report title ****
#report line 1
#report line 2
#report line 3