Ho una classe base di Shape e classi drived Line Segment, Arc, B-spline, ... Voglio trovare il punto di intersezione tra queste forme. Vorrei:
Shape* a = new LineSegment();
Shape* b = new Arc();
bool did_intersect = a->Intersect(b);
Non mi piace questo disegno in Intersect:
bool LineSegment(Shape* s) {
Arc* arc = dynamic_cast<Arc*>(s);
if (NULL != arc)
return LineSegmentArcIntersection(this, arc);
BSpline* bspline = dynamic_cast<BSpline*>(s);
if (NULL != bspline)
return LineSegmentBSplineIntersection(this, bspline);
...
}
Quindi, quale design pattern è più adatto in questo contesto?