Hola.
Después de leer here sobre el patrón Localizador de servicios, me hizo pensar si una clase con solo miembros estáticos realmente es el camino a seguir, o si un interace normal de tipo c no sería más apropiado. Veo gente lanzando la palabra clave class
todo el tiempo cuando ni siquiera la necesitan.
Ejemplo con los miembros estáticos de clase tomada de la página enlazada:Clase de miembros estáticos vs. interfaz normal tipo c
class Locator
{
public:
static IAudio* GetAudio() { return service_; }
static void Register(IAudio* service)
{
service_ = service;
}
private:
static IAudio* service_;
};
Aquí está una manera uno puede hacerlo también:
// in .h
namespace Locator{
IAudio* GetAudio();
void Register(IAudio* service);
}
// in .cpp
namespace Locator{
namespace {
IAudio* service_;
}
IAudio* GetAudio() {
return service_;
}
void Register(IAudio* service) {
service_ = service;
}
}
Ambos ejemplos se pueden llamar exactamente de la misma manera con Locator::GetAudio()
y Locator::Register(...)
. ¿Alguno de los anteriores es superior al otro? ¿Son lo mismo? ¿Hay quizás mejores formas de lograr esto? ¿O se trata solo de preferencias personales? Gracias por cualquier ayuda. :)
Este es un patrón terrible. No tomaría el consejo de ningún sitio que recomiende variables globales como esta. – Puppy
@Xeo: la verdadera pregunta: ¿por qué utilizar un estado global cuando podría proporcionar métodos regulares con datos por instancia? –
@Matthieu: Entonces tendría que registrar la interfaz de audio en cada instancia de ubicación. ¿O quiso decir por qué uno necesitaría tal localizador en primer lugar? – Xeo