lunes, 7 de julio de 2008

Codificación en C++ del Patrón Singleton

Con el patrón singleton nos aseguramos que exista una sola instancia de la clase y podemos acceder a esta de forma global. Siempre debemos respetar el objetivo de la programación orientada a objetos y no colocar variables e instrucciones sueltas en diferentes partes del programa, esto quiere decir que el objetivo del patrón no puede estar disperso sino concentrado en la codificación de la clase.


La clase debe tener un método y una propiedad estática

(Estatico= en C++ static, podemos llamar a cualquier método o usar una propiedad sin tener la necesidad de crear un objeto, por ejemplo:

class CAuto
{
int codigoAuto;
public:
static void m_arrancar();

};

void m_arrancar()
{
cout << "El auto arranca" <<; }

//podemos invocar el método m_arrancar() sin tener que crear el //objeto por ejemplo:

CAuto::m_arrancar(); // así de simple sin tener que crear un objeto.

*tener en cuenta las restricciones de la utilización de static :


Volviendo al tema del patrón singleton, un ejemplo en C++

#include
#include


class CPrograma
{
public:
static CPrograma * VerificarInstancia();
ProbamosInstancia();

~CPrograma(){ cout << "Acá se destruye el programa";
}

protected:
// Constructor
CPrograma() {}
private:
static CPrograma * m_pVerificar;


};


CPrograma * CPrograma::m_pVerificar = 0;


CPrograma * CPrograma::VerificarInstancia()
{

if (!CPrograma::m_pVerificar)
{

cout << "El Objeto Programa se cargó con exito"<<>
CPrograma::m_pVerificar = new CPrograma();
return CPrograma::m_pVerificar;
}
else
{
cout << "El Administrador no permite cargar el programa dos veces" <<>
}


}


CPrograma::ProbamosInstancia()
{
cout << "Acá podemos agregar el codigo para la ejecución del programa" <<>
cout << "Recordar que el patrón singleton permite la creación de un solo objeto" <<>
system("calc.exe");

}



int main()

{
//CPrograma Oprograma = new CPrograma(); // da error porque no se puede crear
//un objeto con el acceso protegido al constructor

CPrograma * OPrograma = CPrograma::VerificarInstancia();
CPrograma * O1Programa = CPrograma::VerificarInstancia(); //Se intenta crear un nuevo objeto
//y el patrón singleton lo impide
OPrograma->ProbamosInstancia();

delete OPrograma;
system("pause");
return 0;

}



2 comentarios:

Rodrigo dijo...

no se pueden crear 2 objetos porque se aplico el patron singleton, el cual solo permite una instanciacion de la clase

Unknown dijo...

1) No se puede crear mas de i objeto por que estamos usando el patron SINGLETON.

2)En la parte protegida, y se declara:
Protected;
cPrograma()

3)Si fuera publico