Ten artykuł jest skierowany do każdego, kto po raz pierwszy spotyka się z koncepcją wzorców projektowych, słyszał termin singleton lub w jakiś sposób zaimplementował wzorzec singleton, ale nie rozumiał, co się dzieje. Powitanie! Uczniowie CodeGym po raz pierwszy spotykają się z wzorcami projektowymi na poziomie 15, kiedy kapitan nieoczekiwanie prosi ich o „wzmocnienie” ich zrozumienia poprzez wdrożenie wzorca Java Singleton z leniwą implementacją. Studenci , którzy po raz pierwszy słyszą o wzorcu singleton , od razu mają mnóstwo pytań: czym, u licha, jest wzorzec projektowy? Dlaczego tego potrzebujemy? Co to jest singleton ? I wreszcie, czym jest leniwa implementacja? Odpowiedzmy na te pytania po kolei.
A wzorzec singleton jest tylko jednym z nich.
z blackjackiem i liczbamii poświęcić na to dużo czasu, lub możesz wdrożyć taki, który był rozumiany i opisywany przez długi czas. To samo dotyczy wzorców projektowych. Ponadto dzięki wzorcom projektowym kod staje się bardziej standardowy, a użycie odpowiedniego wzorca zmniejsza prawdopodobieństwo popełnienia błędów, ponieważ typowe pułapki wzorca zostały zidentyfikowane i wyeliminowane dawno temu. Oprócz wszystkiego, znajomość wzorców pomaga programistom lepiej się zrozumieć. Możesz po prostu powiedzieć nazwę wzorca, zamiast próbować podać obszerne wyjaśnienie swoim kolegom programistom. Podsumowując, wzorce projektowe pomagają:
Na zakończenie tej sekcji zauważamy, że cały zbiór wzorców projektowych można podzielić na trzy duże grupy:
Czym, u licha, jest wzorzec projektowy?
Wierzę, że trochę historii jest po to, aby odpowiedzieć na to pytanie z najlepszym zrozumieniem. Istnieje czterech znanych autorów programistycznych (Erich Gamma, John Vlissides, Ralph Johnson i Richard Helm), którzy wpadli na ciekawy pomysł. Zauważyli, że tworzenie oprogramowania często wymagało od nich rozwiązywania w przybliżeniu tych samych problemów i pisania kodu o tej samej strukturze. Postanowili więc opisać typowe wzorce, które często muszą być stosowane w programowaniu obiektowym. Ich książka została opublikowana w 1994 roku pod tytułem Design Patterns: Elements of Reusable Object-Oriented Software. Nazwa książki okazała się zbyt długa i ludzie zaczęli nazywać ją po prostu książką Gang of Four. Pierwsza edycja obejmowała 23 wzory. Później odkryto dziesiątki innych wzorów.Wzorzec projektowy to standardowe rozwiązanie typowego problemu. |
Po co nam wzorce projektowe?
Możesz programować bez znajomości wzorców: w końcu na poziomie 15 napisałeś już setki mini-programów w CodeGym, nawet nie wiedząc, że one istnieją. Sugeruje to, że wzorce projektowe są rodzajem narzędzia, którego użycie odróżnia mistrza od amatora: Wzorce projektowe opisują, jak prawidłowo rozwiązać typowy problem. Oznacza to, że znajomość wzorców oszczędza czas. Pod tym względem są podobne do algorytmów. Na przykład możesz stworzyć własny algorytm sortowania
|

Wreszcie wzór singletona
Singleton jest wzorcem kreacyjnym . Ten wzorzec zapewnia, że istnieje tylko jedno wystąpienie klasy i zapewnia globalny punkt dostępu dla tego obiektu. Z opisu powinno być jasne, że ten wzór należy zastosować w dwóch przypadkach:- gdy program wymaga utworzenia nie więcej niż jednego obiektu określonej klasy. Na przykład gra komputerowa może mieć klasę Hero i tylko jeden obiekt Hero, który opisuje jedynego bohatera w grze.
- gdy trzeba zapewnić punkt globalnego dostępu do obiektu. Innymi słowy, musisz udostępnić obiekt z dowolnego miejsca w programie. Niestety, nie wystarczy po prostu utworzyć zmiennej globalnej, ponieważ nie jest ona chroniona przed zapisem: każdy może zmienić wartość zmiennej, więc globalny punkt dostępu do obiektu może zostać utracony. Te właściwości Singletona są niezbędne, na przykład, gdy masz obiekt współpracujący z bazą danych i potrzebujesz dostępu do bazy danych z różnych części programu. Singleton sprawi, że nikt nie napisze kodu, który zastąpi wcześniej utworzoną instancję .
-
Znajdź przykład Singletona z leniwą inicjalizacją.
-
Utwórz trzy pojedyncze klasy — Słońce, Księżyc, Ziemia — w oddzielnych plikach, korzystając z tej samej zasady.
-
Wprowadzić w życiePlanetainterfejs w klasach Sun , Moon i Earth .
- W statycznym bloku klasy Solution wywołaj metodęreadKeyFromConsoleAndInitPlanetmetoda.
-
WdrożyćreadKeyFromConsoleAndInitPlanetfunkcjonalność metody:
-
5.1. Odczytaj jeden parametr String z konsoli
-
5.2. Jeśli parametr jest równy jednemu zPlanetastałych interfejsu, utwórz odpowiedni obiekt thePlanet .
-
-
Musisz nadać klasie prywatne pole statyczne, które przechowuje pojedynczy obiekt:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; // #1 }
-
Uczyń (domyślnego) konstruktora prywatnym. Oznacza to, że nie można uzyskać do niego dostępu poza klasą i nie będzie w stanie zwrócić nowych obiektów:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton(){} // #2 }
-
Zadeklaruj statyczną metodę tworzenia, która zostanie użyta do uzyskania singletona:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton() {} public static LazyInitializedSingleton getInstance() { // #3 if (instance == null) { // If the object has not yet been created instance = new LazyInitializedSingleton(); // Create a new object } return instance; // Return the previously created object } }
GO TO FULL VERSION