Decouple an abstraction (Circle) from its implementation (how it's rendered) so the two can vary independently — a Circle doesn't need a VectorCircle/RasterCircle subclass for every renderer.
Implement `VectorRenderer`/`RasterRenderer` (renderCircle(radius)) and Circle.draw(), which delegates to whichever renderer it was given.
solve('raster', 5) → 'raster-circle(5)'
Sample tests