Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Paweł Starzyk Obiektowe metody projektowania systemów Design Pattern - Singleton.

Podobne prezentacje


Prezentacja na temat: "Paweł Starzyk Obiektowe metody projektowania systemów Design Pattern - Singleton."— Zapis prezentacji:

1 Paweł Starzyk Obiektowe metody projektowania systemów Design Pattern - Singleton

2 Paweł Starzyk Obiektowe metody projektowania systemów Plan prezentacji Czym jest singleton i jak pracuje? Jaka jest jego struktura? Implementacja w C++ Przykłady zastosowania singletonu Singleton w aplikacjach wielowątkowych Wady i Zalety Bibliografia

3 Paweł Starzyk Obiektowe metody projektowania systemów Czym jest singleton? Intencja singletonu wg Bandy Czworga: „Zapewnienie, że klasa posiada tylko jedną instancję oraz dostarczenie globalnego punktu dostępu do tej instancji”.

4 Paweł Starzyk Obiektowe metody projektowania systemów Jak singleton pracuje? 1.Specjalna metoda sprawdza czy obiekt został już utworzony a)Tworzy instancję i zwraca do niej referencję b)Zwraca referencję do wcześniej utworzonej instancji 2.Konstruktor deklaruje się jako metodę o dostępie chronionym lub prywatnym (aby zapewnić, że wywołanie tej metody jest jedynym sposobem utworzenia obiektu)

5 Paweł Starzyk Obiektowe metody projektowania systemów Zadanie wzorca singletonu: Umożliwia utworzenie dokładnie jednej instancji danej klasy i nie wymaga od obiektów użytkownika, by „wiedziały”, czy instancja ta została już utworzona

6 Paweł Starzyk Obiektowe metody projektowania systemów Struktura singletonu Użytkownik tworzy instancję singletonu wyłącznie za pomocą metody pobierzInstancje Konstruktor deklarujemy jako metodę o dostępie prywatnym aby nie można się było nim posłużyć do utworzenia większej liczby instancji przez jego bezpośrednie wywołanie

7 Paweł Starzyk Obiektowe metody projektowania systemów Implementacja klasy w C++ class Singleton { public: static Singleton* Instance(); protected: Singleton(); private: static Singleton* _instance; }; Singleton* Singleton::_instance = 0 ; Singleton* Singleton::Instance () { if (_instance == 0) { instance = new Singleton; } return _instance; }

8 Paweł Starzyk Obiektowe metody projektowania systemów Singleton jako Template template class Singleton { public: // Global access point static TYPE *instance (void); protected: // Default constructor. Singleton (void); // Contained instance. TYPE instance_; };

9 Paweł Starzyk Obiektowe metody projektowania systemów Singleton jako Template template TYPE * Singleton::instance_ = 0; template TYPE * Singleton::instance (void) { if (Singleton ::instance_ == 0) { Singleton ::instance_ = new Singleton ; } return Singleton ::instance_; };

10 Paweł Starzyk Obiektowe metody projektowania systemów Przykład zastosowania singletonu

11 Paweł Starzyk Obiektowe metody projektowania systemów Przykładowy kod #include using namespace std; class Singleton { private: static Singleton *single; Singleton() {} // default constructor Singleton(const Singleton& s) {} // copy constructor public: static Singleton* getInstance(); // The interface of the class. void method(); };

12 Paweł Starzyk Obiektowe metody projektowania systemów cd przykładowy kod Singleton* Singleton::single = NULL; Singleton* Singleton::getInstance() { if(single == NULL) { single = new Singleton; return single; } else return single; } void Singleton::method() { cout << "Method of the singleton class" << endl; }

13 Paweł Starzyk Obiektowe metody projektowania systemów Cd przykładowy kod int main() { Singleton *sc1,*sc2, *sc3; sc1 = Singleton::getInstance(); sc1->method(); sc2 = Singleton::getInstance(); sc2->method(); sc3 = Singleton::getInstance(); sc3->method(); if (sc1 == sc2) cout<<"OK. The same pointer"<

14 Paweł Starzyk Obiektowe metody projektowania systemów A gdy aplikacja jest wielowątkowa? 1.Dwa wątki wywołują pobierzInstancje w tym samym czasie 2.Pierwszy z wątków sprawdza że instancja nie istnieje i wykonuje kod związany z jej utworzeniem 3.Drugi wątek sprawdza, czy referencja do instancji klasy jest pusta a że pierwszy wątek jeszcze nie utworzył obiektu, to wykonuje kod związany z utworzeniem instancji 4.W obu wątkach zostają utworzone osobne instancje klasy

15 Paweł Starzyk Obiektowe metody projektowania systemów …co powoduje niepożądane efekty Stały ubytek wolnej pamięci (usuwana tylko jedna instancja) Błędy trudne do odnalezienia jeśli obiekt singletonu charakteryzuje się określonym stanem

16 Paweł Starzyk Obiektowe metody projektowania systemów Rozwiązanie to wzorzec blokowania dwufazowego  Sprawdzenie warunku istnienia singletonu  Synchronizacja operacji  Powtórne sprawdzenie czy obiekt nie został utworzony

17 Paweł Starzyk Obiektowe metody projektowania systemów Prostsze rozwiązanie Gdy jesteśmy pewni, iż w naszym programie będzie nam potrzebny obiekt danej klasy to zamiast stosować wzorzec singletonu możemy w klasie umieścić zmienną statyczną przechowującą referencję do obiektu

18 Paweł Starzyk Obiektowe metody projektowania systemów Wady i Zalety - Co gdy aplikacja jest wielowątkowa? + Oszczędność miejsca na dysku + Kontrola dostępu do instancji + Operacje są bardziej przejrzyste + Łatwość zmieniania liczby instancji

19 Paweł Starzyk Obiektowe metody projektowania systemów Bibliografia „Design Patterns. Elements of Reusable Object-Oriented Software ” – E. Gamma, R. Helm, R. Johnson, J. Vlissides „DESIGN PATTERNS EXPLAINED, new perspective on obiect-oriented design ” – A. Shalloway, J. R. Trott „Wzorce projektowe” – A. Shalloway, J. R. Trott


Pobierz ppt "Paweł Starzyk Obiektowe metody projektowania systemów Design Pattern - Singleton."

Podobne prezentacje


Reklamy Google