Аккуратный шаблон дизайна для иерархии типов геометрии - PullRequest
2 голосов
/ 25 ноября 2011

Я ищу аккуратный способ реализации классного шаблона проектирования для моей коллекции геометрии.Прямо сейчас у меня есть черта Geometry на вершине иерархии типов геометрии.Идея состоит в том, чтобы позволить каждой геометрии наследовать черту, а затем реализовать конкретный код для определенных типов геометрии.Как геометрические объекты эти геометрии должны реализовывать различные методы, конечно.Возьмем, к примеру, возможность рассчитать расстояние до любой другой геометрии - я назвал это distanceTo.Самый чистый способ сделать это должен иметь метод с чертой Geometry, например, так:

def distanceTo(geometry : Geometry) : Double

Моя проблема заключается в следующем: как мне реализовать этот метод в геометрии (скажем, Rectangle) без проверки типов для каждой существующей фигуры?Есть ли какие-нибудь удобные способы делегировать запросы отдельным геометриям?

Cheers,

1 Ответ

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

Так как Scala не имеет многократную диспетчеризацию , ваша лучшая ставка - сопоставление с образцом на парах геометрических объектов. Что-то вроде

(geo1, geo2) match {
  case (Rectangle(x1,y1,w1,h1), Rectangle(x2,y2,w2,h2)) => ....
  ...
}

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

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