Using interfaces for routing
Using the compiler to compile the route patterns
Using the collection to save and hold routes
Using the matcher to match an incoming request against the available
routes

This way it's easy to add other implementations