Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Paweł Starzyk Obiektowe metody projektowania systemów

Podobne prezentacje


Prezentacja na temat: "Paweł Starzyk Obiektowe metody projektowania systemów"— Zapis prezentacji:

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

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 Paweł Starzyk Obiektowe metody projektowania systemów

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”. Paweł Starzyk Obiektowe metody projektowania systemów

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

5 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 Paweł Starzyk Obiektowe metody projektowania systemów

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 Paweł Starzyk Obiektowe metody projektowania systemów

7 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; Paweł Starzyk Obiektowe metody projektowania systemów

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

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

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

11 Paweł Starzyk Obiektowe metody projektowania systemów
Przykładowy kod #include <iostream> 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(); }; Paweł Starzyk Obiektowe metody projektowania systemów

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 void Singleton::method() cout << "Method of the singleton class" << endl; Paweł Starzyk Obiektowe metody projektowania systemów

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"<<endl; else cout<<"Not the same !!!"<<endl; if (sc1 == sc3) return 0; } Paweł Starzyk Obiektowe metody projektowania systemów

14 A gdy aplikacja jest wielowątkowa?
Dwa wątki wywołują pobierzInstancje w tym samym czasie Pierwszy z wątków sprawdza że instancja nie istnieje i wykonuje kod związany z jej utworzeniem 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 W obu wątkach zostają utworzone osobne instancje klasy Paweł Starzyk Obiektowe metody projektowania systemów

15 …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 Paweł Starzyk Obiektowe metody projektowania systemów

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

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 Paweł Starzyk Obiektowe metody projektowania systemów

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 Paweł Starzyk Obiektowe metody projektowania systemów

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 Paweł Starzyk Obiektowe metody projektowania systemów


Pobierz ppt "Paweł Starzyk Obiektowe metody projektowania systemów"

Podobne prezentacje


Reklamy Google