Выполните итерацию в древовидной структуре данных и отправьте информацию во внешний класс с учетом иерархий дерева - PullRequest
1 голос
/ 09 июня 2011

У меня есть класс с именем «Tree», который реализует древовидную структуру данных с неоднородными узлами (у меня есть три вида узлов). В соответствии с принципами объектно-ориентированного программирования, класс Just должен обладать знаниями о деталях обработки и управления деревом, а также о некоторых операциях, таких как сложение, поиск и т. Д.

В моем графическом интерфейсе я хочу добавить иерархии экземпляра этого класса Tree в компонент treeView. Опять же, в соответствии с принципами объектно-ориентированного программирования, treeView не имеет информации о внутренней структуре дерева, а внутренняя структура дерева инкапсулирована, а класс Tree представляет абстрактный интерфейс для дерева.

Таким образом, класс «Tree» может добавлять узлы тоже к компоненту treeView, но я не предпочитаю, чтобы класс «Tree» обладал знаниями о уровне представления и знал, как добавлять узлы в специальный компонент, такой как treeView.

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

1 Ответ

0 голосов
/ 22 февраля 2012

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

http://codebetter.com/jeremymiller/2007/10/31/be-not-afraid-of-the-visitor-the-big-bad-composite-or-their-little-friend-double-dispatch/

http://codeblitz.wordpress.com/2009/07/29/perfect-match-composite-and-visitor-pattern/

Цель шаблона посетителя - заключить в капсулуоперация, которую вы хотите выполнить над элементами структуры данных.Таким образом, вы можете изменить операцию, выполняемую над структурой, без необходимости изменения классов элементов, с которыми вы работаете.Использование шаблона Visitor позволяет разделить классы для структуры данных и используемые на них алгоритмы

...