Wzorce projektowe
singleton
[wzorzec projektowy] Zapewnia, że klasa posiada co najwyżej jedną instancję obiektu.Budowa wzorca projektowego
class CSingleton
{
private:
CSingleton();
CSingleton( const CSingleton & );
public:
static CSingleton & getSingleton()
{
static CSingleton singleton;
return singleton;
}
void metoda1();
void metoda2( int argument );
int metoda3( int argument );
};
Opis szczegółowy
Singleton
(ang. singleton) - wzorzec projektowy, który ogranicza maksymalną ilość instancji obiektu do jedności. Własności singletona:
Zastosowanie
Singletony stosuje się zazwyczaj gdy chcemy posiadać globalny mechanizm dostępu do określonej funkcjonalności (np. logowania błędów).
Zaletą singletona w stosunku do zmiennej globalnej jest to, że zasoby zostaną jemu przydzielone dopiero wtedy, gdy zostanie on wywołany. Oznacza to, że:
W konsekwencji dwóch powyższych punktów uzyskujemy oszczędność zasobów i wzrost szybkości ładowania aplikacji.
Inną istotną zaletą singletona jest jasno określony sposób uzyskiwania dostępu do globalnego zasobu.
Przykład
#include <cstdio>
#include <fstream>
#include <iostream>
class CLog
{
private:
std::fstream m_plik;
CLog() { m_plik.open( "historia.log", std::ios::out ); }
CLog( const CLog & ) { }
~CLog() { m_plik.close(); }
public:
template < typename T >
CLog & operator <<( const T & wypisz )
{
m_plik << wypisz;
return * this;
}
static CLog & getSingleton()
{
static CLog singleton;
return singleton;
}
};
void funkcja1( int iValue )
{
CLog::getSingleton() << "funkcja 1 = " << iValue * iValue << "\n";
}
void funkcja2( int iValue )
{
CLog::getSingleton() << "funkcja 2 = " << iValue + iValue << "\n";
}
int main()
{
funkcja1( 5 );
funkcja2( 5 );
return 0;
}
Inny przykład zastosowania singletona można zobaczyć w przykładzie wzorca projektowego
strategia.
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.