2012-02-09 3 views
0

У меня простой вопрос с дизайном, и я не очень уверен в отношении pro's и con's. Если мне нужно хранить данные в a - let say - древовидной структуре. Допустим, что это дерево и соответствующее дерево являются типизированным классом (надеюсь, правильный термин).Java Design: Type Class vs. Class Extension

Ну, теперь скажем, что я должен хранить некоторые данные в этой базовой структуре. Например, целое число, переменная float и переменная класса.

Это более логично

  1. магазине все эти значения в собственном классе (containerlike) и использовать этот контейнер класс как тип узла или
  2. расширить этот класс узла, добавить дополнительные элементы и используйте одно из этих значений как тип?

Это вопрос дизайна, но, возможно, вы уже познакомились с этим делом.

Большое спасибо!

+2

Это домашнее задание? – Jivings

+1

Композиция, как правило, перфектна по наследованию. Вот как JDK определяет дерево: http://docs.oracle.com/javase/6/docs/api/javax/swing/tree/DefaultTreeModel.html –

ответ

4

Я хотел бы пойти на вариант 1.

Используя этот собственный класс как тип узла через дженериков. Это сделало бы ваш дерево/узел общим для любого типа объекта, который вы могли бы использовать как узел.

Расширение класса node будет представлять ваш объект как узел во всех его применениях, который, вероятно, не тот, который вы хотите. Кроме того, вы бы, вероятно, когда-либо использовали какие-либо методы класса узла в своем классе.

+0

Благодарим за ваш ответ. Последняя точка вашего объяснения мне не поняла. Не могли бы вы обработать это еще несколькими словами? –

+0

@JohnRumpel: «Расширение класса node будет представлять ваш объект как узел во всех его применениях, который, вероятно, не тот, который вы хотите». -> Я имею в виду, что если вы расширяете класс node в своем классе типа, ваш объект всегда наследует атрибуты/метод, специфичные для объекта узла, который, вероятно, не тот, который вы хотите во всех случаях. На самом деле вы, вероятно, только этого хотите, когда манипулируете объектом в своем дереве. – bugske

+0

aaaaah, теперь я понял! :) благодаря ... –