Шаблон дизайна декоратора с использованием наследования и интерфейсов - PullRequest
6 голосов
/ 31 мая 2011

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

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

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

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

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Очевидно, ваш класс Component не предназначен для "украшения".Ты думал о рефакторинге?

2 голосов
/ 31 мая 2011

Я не уверен, что это вообще считается шаблоном декоратора. Больше похоже на старое наследство.

Правильно ли я беспокоиться о потере ресурсов при расширении класса Компонентов?

Очевидно, зависит от того, сколько ресурсов вы тратите.

И если так, как я могу избежать этого, не теряя доступа к информации, которая мне нужна?

Возможно, вы могли бы "открыть" Component, расширив его и добавив методы для доступа к нужным вам защищенным частям. Затем используйте интерфейсы и композицию для реализации декоратора для этого нового класса.

...