Я думаю, что передача в качестве параметра немного более эффективна для памяти, проще в отладке, но требует дополнительной работы.
Я предпочитаю использовать синглтоны только тогда, когда они мне действительно нужны (например, сеансы базы данных, запись в файл и т. Д.).
Это действительно зависит от типа проекта, языка, бюджета, размера проекта и т. Д. «Универсального» ответа не существует.