Шаблон проектирования декоратора с использованием наследования и интерфейсов

Я хотел бы реализовать шаблон проектирования Decorator с использованием наследования ( Decorator extends Component ), потому что мне нужен доступ к защищенным полям / методам класса Component.

Проблема в том, что класс Component представляет алгоритм, он выполняет некоторую предварительную обработку при построении и содержит значительный объем данных. Теперь каждый раз, когда я буду декорировать компонент, я буду создавать новый экземпляр Decorator, который потребует создания нового (бесполезного) экземпляра компонента, выполняющего ненужные вычисления и хранящего ненужные данные.

Я хотел использовать интерфейсы вместо наследования, но тогда я не смогу получить доступ к защищенной информации Компонента.

Правильно ли я беспокоюсь о бесполезной трате ресурсов при расширении класса Component? И если да, то как я могу избежать этого, не теряя доступа к необходимой мне информации?

И последнее замечание: я мог бы создать экземпляр Decorator, снабжая его «фиктивными» данными, чтобы он выполнял минимальный объем вычислений, но это решение кажется грязным.

Спасибо.

6
задан yurib 31 May 2011 в 10:36
поделиться