Я пытаюсь понять шаблон декоратора, и из примеров я понимаю, как объекты-декораторы могут использоваться для расширения существующих функциональных возможностей во время выполнения путем переопределения методов декорированного объекта и как они добавляют дополнительные функции с помощью новых реализаций методов.
Я немного запутался в том, где используются несколько декораторов и как получить доступ к расширенным функциям. Теперь, если вы хотите отправить письмо, которое является методом, предоставляемым классом MailDecorator, вы можете сделать что-то вроде этого:
If(businessObject is MailDecorator)
{
((MailDecorator) businessObject).SendMail();
}
Однако это не сработает, если вы захотите отправить SMS или факс, как в обычной реализации шаблона декоратора. у вас не будет доступа к объекту, на который ссылается декоратор.
Является ли это ограничением шаблона декоратора или это выходит за рамки того, что вы можете ожидать от этого шаблона, или я что-то здесь неправильно понимаю?
Будет ли более подходящим другой образец?
Стандартное определение
«Приложить дополнительные обязанности к объект динамически. Декораторы предоставить гибкую альтернативу подкласс для расширения функциональность »
подразумевает, что это должно быть достижимо с помощью этого шаблона, но, похоже, не работает при использовании нескольких декораторов на одном объекте.