Singleton (Singleton)
Jego celem jest ograniczenie możliwości tworzenia obiektów danej klasy do jednej instancji oraz zapewnienie globalnego dostępu do stworzonego obiektu. Innymi słowy tylko jeden obiekt danej klasy może zostać utworzony.
W celu napisania wzorca projektowego, jakim jest Singleton należy (odnosi się do języków obiektowych takich, jak np.: C++):
- Konstruktor domyślny, konstruktor kopiujący zadeklarować w sekcji private.
- Jeśli chodzi o standard C++11 to w sekcji private należy jeszcze zadeklarować konstruktor przenoszenia oraz operator przenoszenia.
- Operator = kopiujący zadeklarować w sekcji private
- Stworzyć statyczny wskaźnik, referencję w sekcji private, która będzie jedynym "obiektem" tej klasy.
- W sekcji public zadeklarować i zdefiniować metodę o nazwie np. getInstance, która będzie zwracała przez wskaźnik, bądź referencję pole instancji klasy, czyli to, co zadeklarowaliśmy w punkcie 3.
- W zależności od języka można jeszcze zadeklarować i zdefiniować metodę o nazwie, np.: deteteInstance w sekcji public, która będzie w razie potrzeby dealokować przydzieloną pamięć wskaznikowi, który utworzyliśmy w punkcie 3.
Przykładowy kod napisany w języku C++11 został przedstawiony poniżej:
Plik Singleton.h:
//Singleton.h #ifndef SINGLETON_H #define SINGLETON_H #includePlik Singleton.cpp:class Singleton { static Singleton *instance; Singleton(void); Singleton(const Singleton &pattern) = delete; Singleton(Singleton &&pattern) = delete; Singleton& operator=(const Singleton &pattern) = delete; Singleton& operator=(Singleton &&pattern) = delete; public: virtual ~Singleton(void); static Singleton& getInstance(void); static void deteteInstance(void); void print(void); }; #endif
//Singleton.cpp #include "Singleton.h" Singleton* Singleton::instance = nullptr; Singleton::Singleton() { } Singleton::~Singleton() { } Singleton& Singleton::getInstance() { if(instance) { instance = new Singleton(); } return *instance; } void Singleton::deteteInstance() { if(instance) { delete instance; instance = nullptr; } } void Singleton::print() { std::cout << "Hello" << std::endl; }Plik main.cpp:
//main.cpp #includePlik makefile potrzeby do odpalenia programu na Linuxie:#include "Singleton.h" int main(int argc, char **argv) { Singleton &single = Singleton::getInstance(); single.print(); return 0; }
#makefile all: g++ -std=c++0x Singleton.cpp main.cpp -o main && ./main clean: rm -f *.cpp~ && rm -f *~ && rm -f main
Cały kod znajduję się pod tym linkiem:
sciagnij_Singleton
Poniżej przedstawiony został diagram klas:
Best Casino in Vegas, NV - MapYRO
OdpowiedzUsuńA Las Vegas Casino resort with tons of slot 포천 출장샵 machines, table games, 거제 출장샵 live casino and a casino bar. Free 광주광역 출장마사지 WiFi and free 영주 출장샵 parking. Hotel, Free Valet Parking. Rating: 경상남도 출장마사지 2 · 2 reviews
check this hair extensions,costume wigs,hair pieces for women,hair pieces for women,cheap wigs,human hair wigs,cheap wigs,cheap wigs human hair,wigs our website
OdpowiedzUsuń