Дженерики / Интерфейсы и древовидные структуры в Java - PullRequest
3 голосов
/ 17 ноября 2011

Я пытаюсь создать древовидную структуру (двоичное дерево), способную содержать два разных типа классов (сферу и прямоугольник).

По понятным причинам моя сфера и прямоугольник будут иметь разныеметоды для получения их размера (getSize ()), и я также намереваюсь иметь конструктор (для обоих классов), который берет два объекта (две сферы ИЛИ два прямоугольника) и объединяет их, чтобы создать большую сферу или прямоугольник.

Как мне подходить к кодированию узла, чтобы он мог хранить сферу или прямоугольник в узле, вызывая соответствующие методы, когда это необходимо?

Будет ли простой интерфейс выполнить это, если я приведу объекты к нужному мне типу??

Спасибо,

DMcB

Ответы [ 3 ]

3 голосов
/ 17 ноября 2011

Будет ли простой интерфейс выполнить это, если я приведу объекты к нужному мне типу?

Интерфейс Shape может показаться подходящим. Если все сделано правильно, вам вообще не понадобится приведение при вставке предмета.

2 голосов
/ 17 ноября 2011

Я бы создал три класса.Абстрактный класс Shape, который содержит весь общий код для прямоугольников и сфер.

public abstract class Shape{
   // contains all common code related to shapes
   // such as child elements
   Shape parentNode; // This will help navigate up
   List<Shape> children; // This will help navigate down the tree
   // Define, merge, split methods which are common to all shapes
   // define shape specific methods
}
public class Rectangle : Shape{
   // Implement shape's abstract methods for this class
}

public class Sphere : Shape{
   // Implement shape's abstract methods for this class
}

Все специфичные для формы методы следует оставлять абстрактными, например getSize(), drawShape(), mergeShape().Кроме того, возможно, это не имеет значения, но шаблон составного дизайна может быть полезным для этой проблемы

2 голосов
/ 17 ноября 2011

Да, интерфейс, где вы храните общие методы и реализуете их в каждом классе.Тогда полиморфизм позаботится о вызове соответствующего метода во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...