Существует ли шаблон декоратора в классах Java IO?


14

Для задания, я должен выяснить , какие из банды четыре шаблона проектирования классов java.io.Readerи его подклассы java.io.PushbackReader, java.io.BufferedReaderи java.io.FilterReaderбыли построены.

Согласно этому посту, шаблон дизайна будет шаблоном Decorator. Это имеет смысл только для меня , если PushbackReader, BufferedReaderи FilterReaderможет быть украшено быть использованы одновременно, создавая эффективно BufferedPushbackFilterReader. Это идея?


Посмотрите на конструкторы этих классов. Они позволяют вам сложить, например, Buffered природу на вершине Filterприроды?
— Килиан Фот

@Kilian Foth: Похоже, это так.

Ответы:


10

Да, вы действительно можете украсить их так. Просто учтите следующее

PushbackReader pushbackBufferedReader = new PushbackReader(
     new BufferedReader(original));

Это украсит оригинальный читатель

  • сначала буферизироваться
  • и затем включите функцию pushback / непрочитанные (все еще результат буферизирован ..)

FilterReaderи Readerявляются базовыми классами в иерархии ...


И BufferedReader, FilterReaderи PushbackReaderявляются декораторы Reader, не так ли?

1
Да, это правильно.
— duffymo

1
Да - BufferedReader делает базовый читатель буферизованным, PushbackReader позволяет вам «непрочитать» данные из читателя и т. Д.

11

Картина декоратор применяется здесь , потому что BufferedReaderоборачивает Reader- это по - прежнему Reader( в ней есть все методы Reader), но он имеет больше «наворотов» (больше методов).

Вот пример, показывающий, как один класс «украшает» функциональность того, который он упаковывает, и вы можете объединить их в цепочку, чтобы продолжить украшать:

        new BufferedReader(new FileReader(new File("some.file")));
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.