это правильная интерпретация составного паттерна? - PullRequest
3 голосов
/ 23 августа 2011

Одна рекомендация, которую я получаю из составного шаблона, заключается в предоставлении операций по умолчанию, которые обрабатывают недопустимые дочерние операции управления для узла Leaf (т. Е. Генерируют исключение в AddChild, возвращают пустое перечисление для Children и т. Д.).

Мое понимание классического паттерна состоит в том, чтобы иметь один абстрактный класс с подклассом Leaf и подклассом Composite, но если вы предоставляете ops по умолчанию в родительском объекте, разве это эффективно не устраняет необходимость в Leaf?

Кто-нибудь так делает?

Ура,
Беррил

enter image description here

1 Ответ

2 голосов
/ 24 августа 2011

возможно, мы говорим о разных вещах. я предполагаю, что составной шаблон как описано на http://en.wikipedia.org/wiki/Composite_pattern

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

есть класс add() в классе Composite в статье в Википедии, но это значит добавить что-то в составное «представление», а не в какую-либо конкретную структуру данных. другими словами, вы можете получить доступ к некоторым частям дерева данных через составной интерфейс, но метод add() в интерфейсе добавляет или удаляет элементы из этой коллекции, а не из самого дерева.

...