# Proxy パターン # # Java言語で学ぶデザインパターンと同様の例題をRubyで記述した。 # # coded by Takehiro Kaga # class Printable def setPrinterName(name) end def getPrinterName end def printstr(string) end end class Printer < Printable def initialize(name) @name = name heavyJob("Printerのインスタンス(" + @name + ")を生成中") end def printer heavyJob("Printerのインスタンスを生成中") end def setPrinterName(name) @name = name end def getPrinterName @name end def printstr(string) puts "=== " + @name + " ===" puts string end def heavyJob(msg) print msg for i in 0..5 sleep(1) print "." end puts " " puts "完了。" end end class PrinterProxy < Printable def initialize(name) @name = name @real = nil end def setPrinterName(name) if @real != nil @real.setPrinterName(name) end @name = name end def getPrinterName @name end def printstr(string) realize @real.printstr(string) end def realize if @real == nil @real = Printer.new(@name) end end end # ---- Main ---- # p = PrinterProxy.new("Alice") puts "名前は現在" + p.getPrinterName + "です。" p.setPrinterName("Bob") puts "名前は現在" + p.getPrinterName + "です。" p.printstr("Hello, world.")