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
1 end def write_line(line) @real_writer.write_line("#{@line_number}: #{line}") @line_number += 1 end end writer = NumberingWriter.new(SimpleWriter.new('final.txt')) writer.write_line('Hello out there')
NumberingWriter attr_reader :line_number def write_line(line) @line_number = 1 unless @line_number super("#{@line_number}: #{line}") @line_number += 1 end end class Writer define write(line) @f.write(line) end end
Все декораторы одной группы поддерживают одинаковый интерфейс. Каждый принимает вызов метода, обрабатывает информацию и передаёт её следующему декоратору или конечному компоненту.