На самом деле у меня есть презентация по дизайну дизайна декоратора. Я уверен, что я использовал его пару раз в java и C#, цель спросить об этом заключается в том, что я не получаю некоторые простые примеры в мире, с помощью которых я могу легко представить свою аудиторию по этому поводу. Может кто-нибудь мне помочь?О шаблоне дизайна декоратора
ответ
O Streams I/является классическим примером в обоих языках для шаблона Decorator
Цель шаблон Decorator это позволит вам расширить поведение объекта динамически «оборачивать себя» вокруг типа исходного объекта.
В .NET Framework распространенным примером этой «упаковки» является класс Stream
и все его варианты, такие как BufferedStream
и CryptoStream
.
BufferedStream
расширяет класс Stream
, считывая и записывая большие куски данных для лучшей производительности, чем нормальный Stream
; в то время как CryptoStream
расширяет класс Stream
путем шифрования и дешифрования байтов данных «на лету» для обеспечения безопасности. Оба являются потоками, потому что они могут делать все, что может сделать поток, например чтение, запись, поиск и т. Д.
Классы декораторов обычно имеют конструктор с аргументом, который представляет тип, который они намереваются украсить, например:
new BufferedStream(Stream stream);
Вы можете найти принятый ответ here.
Однако, если вы не понимаете ответ по этой ссылке, вот простую иллюстрацию, о которой я думал о том, как работают украшения в реальном мире. Как указано по имени, декоратор похож на украшение в реальном мире.
Представьте себе большой шар. Вы хотите сделать шар с камуфляжем, а некоторые рисунки и наклейки прилагаются. Должно быть достаточно простым.
Болл завод
На первом вы будете иметь Ball Factory
(или создатель), которые производят мяч с черным цветом (или прозрачным, не имеет значения). Достаточно тривиально.
RedColorBall завод
Вы хотите, чтобы шар имеет красный цвет основы. Поэтому после того, как Ball Factory
закончил мяч, тогда RedColorBall Factory
нарисует его красным и вернет его вам. Опять же, это достаточно тривиально.
BluePatternBall завод
Через несколько дней вы думаете, что мяч производства необходимо иметь синий шаблон камуфляж. поэтому после того, как RedColorBall Factory
вернет красный шар, BluePatternBall Factory
нарисует синий узор и вернет его вам.
GreenStripeBall завод
Через несколько дней вы думаете, мяч нужно иметь зеленую полосу вдоль красной основного цвета (это странно, не спрашивайте).Но его нужно нарисовать сразу после окраски красного цвета, и до того, как будет окрашен синий узор. Таким образом, вы делаете GreenStripeBall Factory
и позиционируете его после RedColorBall Factory
и до BluePatternBall Factory
.
ChicagoBullsSticker завод
Тогда, наконец, вам нужна Чикагские быки (случайный выбор, не судите меня) наклейку на бале. Затем вы делаете ChicagoBullsStickerFactory
и ставите его последним после BluePatternBallFactory
. Затем вы получите red-based with green stripe and blue camo pattern ball with chicago bulls sticker
.
Позже, если вам нужно добавить некоторые шаблоны или другие наклейки, прикрепленные к шарам, вам нужно только создать другую фабрику и надеть ее до/после или между ними.
- 1. Вопрос о шаблоне дизайна
- 2. Дублированные атрибуты в шаблоне декоратора
- 3. Проблема при использовании шаблона дизайна декоратора
- 4. о государственном шаблоне дизайна, если он может убр «если еще»
- 5. Первое выражение в шаблоне дизайна
- 6. Когда использовать узор декоратора?
- 7. О библиотеке поддержки дизайна
- 8. В чем разница между «функцией декоратора» и «шаблоном дизайна декоратора» в JavaScript?
- 9. Различия между шаблонами дизайна фасада, прокси, адаптера и декоратора?
- 10. Пытающийся дизайн дизайна декоратора, что случилось с этим кодом?
- 11. Метод именования в шаблоне дизайна посетителей
- 12. Какова потребность в шаблоне дизайна адаптера?
- 13. О шаблоне специализации
- 14. О шаблоне C++
- 15. Вопрос о заводском шаблоне
- 16. C++ - О шаблоне
- 17. миф о фабричном шаблоне
- 18. О шаблоне потребителя/продукта
- 19. Вопрос о шаблоне Facebooker2
- 20. О шаблоне в emberjs
- 21. Компилятор предупреждения о шаблоне
- 22. вопрос о шаблоне mvc
- 23. О принципах дизайна виджета Django
- 24. Как обращаться с этой ссылкой в шаблоне декоратора
- 25. В чем причина перемещения переменной экземпляра в абстрактный класс в шаблоне декоратора?
- 26. рисунок декоратора, применяющий противопоказания
- 27. о шаблоне Singleton в Swift
- 28. Используя положение о шаблоне класса
- 29. Вопрос о возможном шаблоне проектирования
- 30. О шаблоне и операторах C++
http://en.wikipedia.org/wiki/Decorator_pattern – sab669
http://stackoverflow.com/questions/2707401/please-help-me-understand-the-decorator-pattern-with-a-real-world -пример. Посмотрите на java.io.FileInputStream и java.io.BufferedInputStream для примера. http://stackoverflow.com/questions/6366385/decorator-pattern-for-io – user1339772