# Composite パターン # # Java言語で学ぶデザインパターンと同様の例題をRubyで記述した。 # # coded by Takehiro Kaga # class Entry def getName end def getSize end # def printList # printList("") # end # def toString # getName + " (" + getSize + ")" # end end class FileI < Entry # FileはRubyでは既に基本部で使っているので使用不可 def initialize(name, size) @name = name @size = size end def getName @name end def getSize @size end def printList(prefix) puts(prefix + "/" + getName + " (" + getSize.to_s + ")") end end class Directory < Entry def initialize(name) @name = name @directory = Array.new end def getName @name end def getSize size = 0 @directory.each {|item| size += item.getSize } size end def add(entry) @directory.push(entry) end def printList(prefix) puts(prefix + "/" + getName + " (" + getSize.to_s + ")") @directory.each {|item| item.printList(prefix + "/" + @name) } end end puts "Making root entries..." rootdir = Directory.new("root") bindir = Directory.new("bin") tmpdir = Directory.new("tmp") usrdir = Directory.new("usr") rootdir.add(bindir) rootdir.add(tmpdir) rootdir.add(usrdir) bindir.add(FileI.new("vi", 10000)) bindir.add(FileI.new("latex", 20000)) rootdir.printList(" ") puts "" puts "Making user entries..." yuki = Directory.new("yuki") hanako = Directory.new("hanako") tomura = Directory.new("tomura") usrdir.add(yuki) usrdir.add(hanako) usrdir.add(tomura) yuki.add(FileI.new("dialy.html", 100)) yuki.add(FileI.new("Composite.java", 200)) hanako.add(FileI.new("memo.tex", 300)) tomura.add(FileI.new("game.doc", 400)) tomura.add(FileI.new("junk.mail", 500)) rootdir.printList(" ")