Как спроектировать эту иерархию классов? - PullRequest
0 голосов
/ 02 апреля 2010

Я определил класс события:

Event

и все следующие классы наследуются от Event:

AEvent BEvent CEvent DEvent

Теперь, с информацией, которую я собираю из всех этих классов Событий, я сделаю диаграмму. С помощью AEvent и BEvent я буду генерировать точки для этой диаграммы, а с помощью CEvent и DEvent я буду рисовать некоторые области диаграммы.

Теперь, как я должен сигнализировать об этом в моей иерархии классов?

  1. Должен ли я сделать AEvent и BEvent наследуемыми от PointEvent, в то время как CEvent и DEvent наследуются от RegionEvent, если и RegionEvent, и PointEvent наследуют от Event?
  2. Должен ли я добавить поле с Enum to Event с 2 значениями, Point и Region, и каждый из дочерних классов устанавливает для него свое значение?
  3. Должен ли я использовать какой-то шаблон здесь? Какой?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2010

Я бы не подумал, что событие будет иметь какое-либо отношение к рисованию. Поэтому я бы хотел создать что-то вроде EventPainter с подклассами PointEventPainter и RegionEventPainter. Некоторая другая организация будет нести ответственность за получение соответствующего EventPainter для данного события.

1 голос
/ 02 апреля 2010

Это действительно зависит от вашего точного сценария. AEvent, BEvent, RegionEvent, PointEvent немного расплывчаты. ; -)

Вариант 1 в большинстве случаев подходит. Тем не менее, это также звучит немного как интерфейсы à la IDrawsRegion или IDrawsPoint. Кроме того, я чувствую, что здесь просвечивает немного паттерна Strategy , на который вы можете взглянуть.

1 голос
/ 02 апреля 2010

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

Поскольку AEvent и BEvent, по сути, являются подклассами PointEvent, имеет смысл иметь класс PointEvent. То же самое относится и к RegionEvent.

Это поможет вам объединить общий код и избежать ненужного повторения кода.

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