» Utilizator
Salut, vizitatorule!

SkullBox este o comunitate formata din programatori si administratori de sisteme sau retele care iti sta la dispozitie cand ai o problema legata de calculatoare. Daca esti un utilizator existent, autentifica-te.

Daca nu te-ai inregistrat inca pe forum, alatura-te noua astfel marind comunitatea si ajutandu-i pe cei care au nevoie de informatii.

Daca te-ai inregistrat dar inca nu ai primit codul de activare, il poti cere aici.




Autentifica-te cu numele de utilizator si parola pentru a putea posta pe forum sau pentru a accesa ariile disponibile doar utilizatorilor inregistrati.
» Promovam
» Parteneri » Statistici
  • 59774 de mesaje.
  • 7153 de topicuri.
  • 1002 de utilizatori.
  •  
  • BirthBaby e ultimul utilizator inregistrat.
[Detalii]

 
Pagini: [1]
Print
Design Pattern -> Singleton (foarte foarte folositor) [351 afisari]
Th3 P!mp
*


Mesaje: 186
OfflineOffline

WWW

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)
Code:
#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 Smile

Logged

16-05-2009, 19:35 Twitt ::
Reclama
VIP

Hosting

Mesaje: 25.90
OnlineOnline

WWW
 

   Pe ABCDomenii: 250MB spatiu + 20GB trafic + 5 subdomenii = 0.95 €
 
 

The problem with troubleshooting is that trouble shoots back.
Azi 
Pages: [1]
Print
SkullBox Forum  |  Development  |  Java / C / C++ / C#  |  C/C++/C# Snippets (Moderators: AnaKonD, astan)  |  Topic: Design Pattern -> Singleton (foarte foarte folositor)
Jump to: