/
04_composite_sample.rb
88 lines (73 loc) · 1.74 KB
/
04_composite_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
82
83
84
85
86
87
88
# -*- coding: utf-8 -*-
# FileEntry, DirEntryクラスの共通メソッドを規定(Component)
class Entry
# ファイル/ディレクトリの名称を返す
def get_name; end
# ファイル/ディレクトリのパスを返す
def ls_entry(prefix) end
# ファイル/ディレクトリの削除を行う
def remove; end
end
# ファイルを表す(Leaf)
class FileEntry < Entry
def initialize(name)
@name = name
end
# ファイルの名称を返す
def get_name
@name
end
# ファイルのパスを返す
def ls_entry(prefix)
puts(prefix + "/" + get_name)
end
# ファイルの削除を行う
def remove
puts @name + "を削除しました"
end
end
# ディレクトリを表す(Composite)
class DirEntry < Entry
def initialize(name)
@title = name
@directory = Array.new
end
# ディレクトリの名称を返す
def get_name
@title
end
# ディレクトリにファイルを追加する
def add(entry)
@directory.push(entry)
end
# ファイル/ディレクトリのパスを返す
def ls_entry(prefix)
puts(prefix + "/" + get_name)
@directory.each do |e|
e.ls_entry(prefix + "/" + @title)
end
end
# ファイル/ディレクトリの削除を行う
def remove
@directory.each do |i|
i.remove
end
puts @title + "を削除しました"
end
end
# ===========================================
root = DirEntry.new("root")
tmp = DirEntry.new("tmp")
tmp.add(FileEntry.new("conf"))
tmp.add(FileEntry.new("data"))
root.add(tmp)
root.ls_entry("")
#=> /root
#=> /root/tmp
#=> /root/tmp/conf
#=> /root/tmp/data
root.remove
#=> confを削除しました
#=> dataを削除しました
#=> tmpを削除しました
#=> rootを削除しました