refactored route-matching strategies into separate classes