Ruby/Design Patterns/Decorator
Материал из Wiki.crossplatform.ru
Версия от 17:10, 26 мая 2010; (Обсуждение)
Decorator pattern
class Printer def initialize(path) @file = File.open(path, "w") end def write_line(line) @file.print(line) @file.print("\n") end def pos @file.pos end def rewind @file.rewind end def close @file.close end end class PrinterDecorator def initialize(real_writer) @real_writer = real_writer end def write_line(line) @real_writer.write_line(line) end def pos @real_writer.pos end def rewind @real_writer.rewind end def close @real_writer.close end end class NumberPrinter < PrinterDecorator def initialize(real_writer) super(real_writer) @line_number = 1 end def write_line(line) @real_writer.write_line("#{@line_number}: #{line}") @line_number += 1 end end writer = NumberPrinter.new(Printer.new("final.txt")) writer.write_line("Hello out there") class StringPrinter < PrinterDecorator attr_reader :check_sum def initialize(real_writer) @real_writer = real_writer @check_sum = 0 end def write_line(line) @real_writer.write_line(line) end end class TimeStampingWriter < PrinterDecorator def write_line(line) @real_writer.write_line("#{Time.new}: #{line}") end end writer = StringPrinter.new(TimeStampingWriter.new( NumberPrinter.new(Printer.new("final.txt")))) writer.write_line("Hello out there")