Синглтон там явно лишний. И если роут не определен отображать 404, а не дефолтный контроллер.
Добавлено:
> про дефолтный контроллер чуть подробнее
При запросе "/такой-страницы-у-меня-нет" нужно показать 404. А в вашем же случае все ссылки на несуществующие страницы будут отображать дефолтный контроллер.
> Объясните пожалуйста почему синглтон лишний
Синглтон нужен для получения доступа к инстансу с любого места в приложении. Если бы это был главный контейнер приложения, то да, это имеет смысл. Но для роутера, который выполняется всегда в одном и том же месте в приложении, синглтон не нужен. Вы просто раз вызвали роутер и больше он не нужен: ( new Router() )->init();