Существует ли шаблон декоратора в классах 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.