Чи існує шаблон декору в класах Java IO?


14

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

Відповідно до цієї публікації, модель дизайну була б «Декоратором». Це має сенс для мене лише тоді PushbackReader, коли BufferedReaderі FilterReaderможе бути прикрашене для використання одночасно, створюючи ефективно BufferedPushbackFilterReader. Це ідея?


Подивіться на конструкторів цих класів. Чи дозволяють вони укладати, наприклад, Buffered природу поверх Filterприроди?
Кіліан Фот

@Kilian Foth: Схоже.

Відповіді:


10

Так, ви дійсно можете їх так прикрасити. Просто врахуйте наступне

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

Це б прикрасило оригінального читача

  • спочатку бути буферним
  • а потім увімкніть функцію відкату / непрочитаного (результат все-таки буферизований ..)

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.