Проблема с дизайном класса - PullRequest
0 голосов
/ 13 августа 2010

У меня есть классы, как показано ниже

public class Book extends Item{ ...}
public class DVD extends Item{ ...}

Книга может быть типа REFRENCE или ISSUE.DVD может быть только типа ISSUE.

Так я должен создать Item следующим образом?

public class Item {

  public enum ItemType{REFRENCE,ISSUE};
  ItemType itemtype;

}

Или я должен объявить отдельное перечисление для книги и DVD?

Ответы [ 3 ]

4 голосов
/ 13 августа 2010

Как насчет определения двух интерфейсов Reference и Issue и Book будут реализовывать оба, тогда как DVD будет реализовывать только Issue?

2 голосов
/ 13 августа 2010

Это зависит.Является ли DVD ISSUE тем же, что и книга ISSUE?

Если так, поместите его в родительский класс и сгенерируйте исключение, если вы создаете REFERENCE DVD.

Если это не так, определите отдельные публичные перечисления в двух подклассах.

1 голос
/ 13 августа 2010

Сохраняя тип объекта в перечислении, вы идете против использования объектно-ориентированных возможностей языка.Кроме того, я не чувствую, что «элемент» имеет «свойство быть проблемой / ссылкой».Это скорее отношение «является», которое предполагает, что вы должны использовать наследование / интерфейсы.Конечно, правильный подход зависит от того, для чего предназначена ваша программа.Иногда объектно-ориентированные конструкции могут мешать вам.

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