¿Es una mala práctica / diseño de codificación hacer una clase que solo se instanciará una vez?
No, incluso si solo se instancia una vez, necesita una clase para ello. Pero no suponga que siempre necesitará solo una instancia, ahora y en el futuro.
Supongamos que haces un juego y tienes una clase de jugador:
class Player {
...
}
Instanciará una clase de jugador en su juego y usará siempre el mismo objeto. No tiene nada de malo.
Sin embargo, ¡no hagas un Singleton! Hoy diseñas tu juego y piensas "Bueno, siempre será un juego de un jugador. Usaré un Singleton para mi jugador". Pero en la versión 2, es posible que desee implementar el modo multijugador, y luego se está metiendo en problemas. Tendrá que volver a escribir y adaptar una gran cantidad de código, porque su diseño no admite la creación de instancias de varios jugadores.
Lo mismo ocurre con los cachés. O madereros. O interfaces de red. Hoy, crees que solo necesitarás uno, siempre, seguro. Pero en una versión futura necesita agregar un segundo. Ten en cuenta esta situación.