2013-11-14 3 views
2

На самом деле у меня есть презентация по дизайну дизайна декоратора. Я уверен, что я использовал его пару раз в java и C#, цель спросить об этом заключается в том, что я не получаю некоторые простые примеры в мире, с помощью которых я могу легко представить свою аудиторию по этому поводу. Может кто-нибудь мне помочь?О шаблоне дизайна декоратора

+1

http://en.wikipedia.org/wiki/Decorator_pattern – sab669

+1

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

ответ

0

O Streams I/является классическим примером в обоих языках для шаблона Decorator

0

Цель шаблон Decorator это позволит вам расширить поведение объекта динамически «оборачивать себя» вокруг типа исходного объекта.

В .NET Framework распространенным примером этой «упаковки» является класс Stream и все его варианты, такие как BufferedStream и CryptoStream.

BufferedStream расширяет класс Stream, считывая и записывая большие куски данных для лучшей производительности, чем нормальный Stream; в то время как CryptoStream расширяет класс Stream путем шифрования и дешифрования байтов данных «на лету» для обеспечения безопасности. Оба являются потоками, потому что они могут делать все, что может сделать поток, например чтение, запись, поиск и т. Д.

Классы декораторов обычно имеют конструктор с аргументом, который представляет тип, который они намереваются украсить, например:

new BufferedStream(Stream stream); 
1

Вы можете найти принятый ответ 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.

Позже, если вам нужно добавить некоторые шаблоны или другие наклейки, прикрепленные к шарам, вам нужно только создать другую фабрику и надеть ее до/после или между ними.

Смежные вопросы