Wzorzec projektowy singleton
Stronę tą wyświetlono już: 1993 razy
Opis wzorca projektowego singleton
Wzorzec projektowy singleton należy do wzorców kreacyjnych a jego celem jest ograniczenie możliwości tworzenia wielu instancji danej klasy. W podstawowym założeniu jest ograniczenie liczby możliwych do utworzenia obiektów danej klasy do jednej instancji. W C++ efekt ten uzyskuje się poprzez utworzenie prywatnego lub chronionego konstruktora klasy oraz statycznej metody tejże klasy zawierającej statyczną zmienną będącą instancją tejże klasy, która jest przez ową metodę zwracana.
Diagram UML wzorca projektowego singleton
Powiedzmy, że tworzę dziennik wpisów, który ma być dostępny globalnie i przechowywać wpisy. Nie potrzebuję więc większej liczby takich obiektów więc tworzę klasę LogBook, która ma prywatny konstruktor. Dzięki zastosowaniu statycznej metody getInstance użytkownik otrzymuje dostęp do jedynej instancji klasy LogBook.
Przykładowa implementacja wzorca projektowego singleton w C++
- #include <iostream>
- #include <string>
- #include <time.h>
- #include <map>
- class LogBook{
- private:
- LogBook(){}; // prywatny konstruktor klasy
- std::map<time_t, std::string> logEntry; // tutaj wpisy przechowuję
- public:
- void addLogEntry(){
- std::string entry;
- std::cout<<"Podaj wpis: ";
- std::getline(std::cin, entry);
- time_t logEntryTime;
- time(&logEntryTime);
- logEntry[logEntryTime] = entry;
- std::cout<<std::endl;
- }
- void writeLogBook(){
- for(std::map<time_t, std::string>::iterator i = logEntry.begin(); i != logEntry.end(); i++){
- std::cout<<ctime(&i->first)<<std::endl;
- std::cout<<i->second<<std::endl<<std::endl;
- }
- }
- static LogBook& getInstance(){ // metoda statyczna zwracająca instancję obiektu
- static LogBook instance; // ta zmienna statyczna jest inicjalizowana tylko raz
- return instance;
- }
- };
- int main(){
- LogBook::getInstance().addLogEntry(); // pobieram wpis od użytkownika
- LogBook::getInstance().writeLogBook(); // wypisuję wpisy
- LogBook::getInstance().addLogEntry(); // pobieram kolejny wpis od użytkownika
- LogBook::getInstance().writeLogBook(); // wypisuję wpisy
- std::cin.get();
- return 0;
- }
Przykładowy wynik działania powyższego kodu:
Podaj wpis: Nam strzelać nie kazano Fri Aug 04 16:52:32 2017 Nam strzelać nie kazano Podaj wpis: Wstąpiłem na działo Fri Aug 04 16:52:32 2017 Nam strzelać nie kazano Fri Aug 04 16:52:41 2017 Wstąpiłem na działo

Tytuł:
React 17. Wzorce projektowe i najlepsze praktyki. Projektowanie i rozwijanie nowoczesnych aplikacji internetowych. Wydanie III
Autor:
Carlos Santana Roldán

Tytuł:
Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II
Autor:
Eric Freeman, Elisabeth Robson

Tytuł:
Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#
Autor:
Dmitri Nesteruk

Tytuł:
Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku
Autor:
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Tytuł:
Projektowanie interfejsów., Sprawdzone wzorce projektowe. Wydanie III
Autor:
Jenifer Tidwell, Charles Brewer, Aynne Valencia-Brooks

Tytuł:
Kubernetes. Wzorce projektowe. Komponenty wielokrotnego użycia do projektowania natywnych aplikacji chmurowych
Autor:
Bilgin Ibryam, Roland Huß

Tytuł:
Wzorce projektowe w .NET. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#
Autor:
Dmitri Nesteruk

Tytuł:
Programowanie zorientowane obiektowo. Wzorce projektowe. Wydanie II
Autor:
Alan Shalloway, James R. Trott

Tytuł:
Java EE 8. Wzorce projektowe i najlepsze praktyki
Autor:
Rhuan Rocha, Joao Purificacao

Tytuł:
Systemy reaktywne. Wzorce projektowe i ich stosowanie
Autor:
Roland Kuhn Dr., Brian Hanafee, Jamie Allen