Я хотел бы реализовать шаблон проектирования Decorator с использованием наследования ( Decorator extends Component
), потому что мне нужен доступ к защищенным полям / методам класса Component.
Проблема в том, что класс Component представляет алгоритм, он выполняет некоторую предварительную обработку при построении и содержит значительный объем данных. Теперь каждый раз, когда я буду декорировать компонент, я буду создавать новый экземпляр Decorator, который потребует создания нового (бесполезного) экземпляра компонента, выполняющего ненужные вычисления и хранящего ненужные данные.
Я хотел использовать интерфейсы вместо наследования, но тогда я не смогу получить доступ к защищенной информации Компонента.
Правильно ли я беспокоюсь о бесполезной трате ресурсов при расширении класса Component? И если да, то как я могу избежать этого, не теряя доступа к необходимой мне информации?
И последнее замечание: я мог бы создать экземпляр Decorator, снабжая его «фиктивными» данными, чтобы он выполнял минимальный объем вычислений, но это решение кажется грязным.
Спасибо.