Пожалуйста, обратите внимание: я не хочу помогать кодированию здесь, я нахожусь по Programmers
причине. Я хочу улучшить свои навыки планирования / написания программ, а не (просто) мое понимание Java .
Я пытаюсь выяснить , как сделать дерево , которое имеет произвольную систему категорий, на основе навыков , перечисленных в этой LARP игру здесь . Моя предыдущая попытка была связана с тем, относится ли навык к категории. Попытка закодировать это было грязно. Рисуя мое дерево, я заметил, что только мои «листья» были навыками, а другие я назвал категориями.
Мне нужен способ создать дерево, которое пытается разделить Model и View, и позволяет добавить произвольный тип дочернего узла (с отдельным способом редактирования / визуализации) к произвольному родителю.
NB. Все здесь покупается как навык, даже если это похоже на собственность. Конечные пользователи увидят в этом навыки покупки (которые они делают на бумажном банкомате), поэтому они должны быть представлены как таковые, все на одной странице.
Объяснение дерева: Дерево «рождено» с набором жестко закодированных категорий высшего уровня ( оружие, физическое и умственное, медицинское и т. Д.). Из этого пользователь должен иметь возможность добавить навык. В конечном итоге они хотят добавить навык « Одноручный меч» ( не предмет), например. Для этого в идеале нужно нажать «добавить» с Weapons
выбранным, а затем выбрать One-handed
из списка в выпадающем списке, который появляется на этом дочернем элементе, затем снова нажать «Добавить» и ввести имя в текстовое поле на этом дочернем узле, который появляется. Затем нажмите «Добавить» еще раз, чтобы добавить / указать «уровень» или «уровень» для этого листа; сначала знание, затем специализация (например).
Конечно, если вы хотите купить другой навык, это совершенно другой путь к листу. Вам может не понадобиться поле со списком на том же уровне вниз по дереву, как вы делали с примером с оружием, и вам нужна другая логика за ним. Это то, что я испытываю проблемы с тем, чтобы не думать о программировании; как сделать набор классов и не указывать, в каком порядке их объединять, но все же они все подходят.
Что такое хорошая система для описания такого рода дерева в коде? Все остальные примеры JTree, которые я видел, имеют предсказуемый паттерн, а мой - нет . Я не хочу кодировать все это в «литералах», с длинными списками того, какой тип (комбинированный список , текстовое поле и т. Д.) Дочернего узла должен быть разрешен для какого родителя. Должен ли я использовать абстрактные классы? Интерфейсы?
Как я могу сделать такой кластер объектов расширяемым, когда я добавлю другие навыки, не перечисленные выше, которые ведут себя по-другому?
Если нет хорошей системы для использования, есть ли хороший процесс для разработки, как делать такие вещи?
Шестерни в моей голове крутятся:
Мне всегда нужно:
- Проверьте родителя
- Предоставить варианты на основе родителя
Я начинаю думать, что из-за этой общности мне нужен какой-то абстрактный skill
класс / интерфейс, который определяет / описывает общие методы для навыков и категорий. Я могу (надеюсь) поместить правила и опции в базу данных и читать там. Вопрос сейчас в том, что я думаю, между абстрактным или интерфейсным методом и как это реализовать.