Вы должны программировать против интерфейсов, используя фабричные шаблоны, потому что все безумие.
Синглтон может быть полезен, но опять же только при необходимости / желании.
Главное не использовать вещи, которые вы не понимаете или не видите смысла, стоит почитать книгу Мартина Фаулера, а затем подумать об этом снова, и вы можете заключить, что средний путь вам подходит.
В программировании нет правильного / неправильного, зависит от многих факторов. Даже использование интерфейса для всего может быть болезненным, но это всегда окупается за меня.