Buna seara prieteni am scris o clasa de sound manager, cel putin doar baza, este foarte folositor in cazul jocurilor unde lumea dupa ce scrie sute de linii de cod nu are chef sa isi mai faca griji cu modul in care da play unui sunet in punctul X al codului... aici intervine singletonul (1 singura instanta statica ce este obtinuta printr-un apel al unei functii statice)
#include <iostream>
using namespace std;
class Sound{};
class SoundManager
{
static SoundManager * instance;
static int numberOfInstances;
Sound * sounds;
int numberOfSounds;
SoundManager()
{
sounds = new Sound[]; // ARRAY DINAMIC DE SUNETE
numberOfSounds = 0;
};
public:
~SoundManager(){ numberOfInstances -- ; /*DACA DISTRUGEM O INSTANTA DECREMENTAM SI NUMARUL REFERINTELOR*/};
static SoundManager * getInstance();
void addSound(Sound sound);
int howManySounds();
int howManyInstances();
};
int SoundManager::numberOfInstances = 0; // INITIALIZAM NUMARUL DE INSTANTE CU 0
SoundManager* SoundManager::instance = NULL; // SETAM INSTANTA PE NULL
SoundManager * SoundManager::getInstance()
{
if(numberOfInstances == 0) // DACA NU EXISTA NICI O INSTANTA A ACESTEI CLASA ...
instance = new SoundManager(); // O CREAM NU ? :)
numberOfInstances ++ ; // INCREMENTAM NUMARUL DE INSTANTE
return instance;
}
// .. RESTUL E ISTORIE
void SoundManager::addSound(Sound sound)
{
cout << " - added sound - " << endl;
sounds[numberOfSounds++] = sound;
}
int SoundManager::howManySounds()
{
return numberOfSounds;
}
int SoundManager::howManyInstances()
{
return numberOfInstances;
}
int main()
{
SoundManager *s1, *s2;
Sound s,a,b,c;
s1 = SoundManager::getInstance();
s2 = SoundManager::getInstance();
s1->addSound(s);
s1->addSound(a);
s1->addSound(b);
s1->addSound(c);
cout << " numar instante " << s1->howManyInstances() << endl;
cout << s2->howManySounds() << endl; // rezulta 4 sunete
cout << s1->howManySounds() << endl; // tot 4 sunete existand o singura instanta ( cum s-ar veni SINGLETON)
// mi fac inca o instanta ...
SoundManager *lastInstance = SoundManager::getInstance();
cout << lastInstance->howManySounds() << endl; // yep tot 4 sunete :)
cout << " numar instante " << lastInstance->howManyInstances() << endl;
return 0;
}
eu cel putin folosesc la lucru o clasa asemanatoare