Использование нескольких декораторов для добавления функциональности к объекту?

Я пытаюсь понять шаблон декоратора, и из примеров я понимаю, как объекты-декораторы могут использоваться для расширения существующих функциональных возможностей во время выполнения путем переопределения методов декорированного объекта и как они добавляют дополнительные функции с помощью новых реализаций методов.

Я немного запутался в том, где используются несколько декораторов и как получить доступ к расширенным функциям. Теперь, если вы хотите отправить письмо, которое является методом, предоставляемым классом MailDecorator, вы можете сделать что-то вроде этого:

If(businessObject is MailDecorator)
{
    ((MailDecorator) businessObject).SendMail();
}  

Однако это не сработает, если вы захотите отправить SMS или факс, как в обычной реализации шаблона декоратора. у вас не будет доступа к объекту, на который ссылается декоратор.

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

Стандартное определение

«Приложить дополнительные обязанности к объект динамически. Декораторы предоставить гибкую альтернативу подкласс для расширения функциональность »

подразумевает, что это должно быть достижимо с помощью этого шаблона, но, похоже, не работает при использовании нескольких декораторов на одном объекте.

6
задан Steven 5 April 2011 в 12:42
поделиться