Por favor reconsidere. NO quieres usar singletons aquí. Está poniendo a disposición algunas funcionalidades para los usuarios que derivan de su clase. Esta bien. Pero también estás dictando una forma específica en la que siempre debe usarse, y sin ninguna razón. Eso no es bueno.
Puede tener sentido solo crear una instancia de un objeto de esta clase la mayoría de las veces, pero en ese caso, simplemente ejemplifique el objeto una vez. No es muy probable que crearas una instancia de una docena de objetos accidentalmente sin darte cuenta. Además, ¿cómo puede saber que tener dos instancias será NUNCA útil? Puedo pensar en varios casos incluso ahora.
Pruebas unitarias: es posible que desee que cada prueba cree una instancia de este objeto y vuelva a derribarlo. Y como la mayoría de las personas tiene más de una prueba de unidad, necesitará crear una instancia más de una vez.
O tal vez en algún momento decidas tener varios niveles idénticos/similares en tu juego, lo que significa crear instancias múltiples.
un producto único le da dos cosas:
- Una garantía de que no más de una instancia del objeto siempre se creará una instancia, y
- Acceso global a dicha instancia
Si No necesito estas dos cosas, hay mejores alternativas. Ciertamente no necesita acceso global. (los globales son malos, y generalmente son un síntoma de un mal diseño, especialmente en datos variables como el estado de tu juego)
Pero no necesitas la garantía de que tampoco se crearán instancias de más de una instancia. ¿Es el fin del mundo si instancia el objeto dos veces? ¿Se bloqueará la aplicación? Si es así, necesitas esa garantía. Pero en su caso, no pasará nada malo. La persona que instancia el objeto simplemente usa más memoria de la necesaria. Pero él podría tener una razón.
Simplemente ponga en la documentación de la clase que esta es una clase muy grande y costosa, y no debe instanciarla más a menudo de lo necesario. Problema resuelto. No elimina la flexibilidad que podría resultar útil más adelante, no otorga acceso global a los datos sin ningún motivo. Como puede controlar quién puede ver el objeto, no necesita ahogarlo en bloqueos que se convertirán en un cuello de botella en aplicaciones multiproceso. No tiene dependencias ocultas diseminadas por su código, lo que hace que sea más difícil de probar y más difícil de reutilizar.
He estado en la valla con respecto a los singletons durante algún tiempo. Pero este hilo hace algunos buenos puntos para no usarlos: http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons – JMD
Hay cientos de hilos, publicaciones en blogs y artículos llenos de razones que no para usar singletons Es extremadamente raro que realmente mejoren tu código. Por favor reconsidera esto. Usted, y cualquier otro desarrollador que trabaje con ese código, se arrepentirá de incluir singleton en todas partes. – jalf