Streams в Java - подклассы InputStream
и OutputStream
являются прекрасными примерами шаблона декоратора.
Например, запись файла на диск:
File toWriteTo = new File("C:\\temp\\tempFile.txt");
OutputStream outputStream = new FileOutputStream(toWriteTo);
outputStream.write("Sample text".getBytes());
Затем, если вам потребуется дополнительная функциональность, связанная с записью на диск:
File toWriteTo = new File("C:\\temp\\tempFile.txt");
OutputStream outputStream =
new GZIPOutputStream(new FileOutputStream(toWriteTo));
outputStream.write("Sample text".getBytes());
Просто «связывая» конструкторы, вы можете создать довольно мощные способы записи на диск.Прелесть этого способа в том, что вы можете добавить различные (в этом примере) реализации OutputStream
позже.Кроме того, каждая реализация не знает, как работают другие - все они работают по одному и тому же контракту.Это также делает тестирование каждой реализации очень простым в отдельности.
Существует множество примеров «реального мира», в которых можно использовать шаблон декоратора.Вдобавок ко всему, некоторые примеры:
- Чтение и запись на диск (см. Выше)
- Создание элементов пользовательского интерфейса, например добавление полос прокрутки в текстовые области и т. Д.
Head First Design Patterns содержит еще несколько примеров из "реального мира".Похоже, что у О'Рейли есть образец главы, которая посвящена Декоратору, бесплатно;Google обнаружил эту ссылку: PDF