Wzór projektu singleton w C#

Wzór projektu singleton w C#

Wzór projektu Singleton jest szeroko stosowanym wzorem projektowym w programowaniu zorientowanym na obiekty, ponieważ zapewnia, że ​​tylko jedna instancja klasowa jest utworzona, a dostęp do niego zapewnia globalny punkt dostępu. Oznacza to, że każde żądanie instancji klasy zwraca tę samą instancję, zamiast tworzyć nowe.

Wzór projektu singleton w C#

Wzór singletonu jest znany ze swojej prostoty i skuteczności w zapewnieniu, że istnieje tylko jeden przypadek klasy, co czyni go popularnym wyborem dla wielu programistów. Wzór singletonu jest często używany do zapewnienia, że ​​istnieje jeden punkt dostępu do wspólnego zasobu lub usługi, oto składnia do korzystania z niego:

Klasa publiczna

Prywatny statyczny odczyt instance = nowy ();
prywatny ()
publiczne statyczne Instancja

Dostawać

Instancja powrotu;


Zapieczętowane słowo kluczowe służy do uniemożliwiania odziedziczonej klasy, a pole instancji jest oznaczone jako odczytane tylko w celu zapewnienia, że ​​można je zainicjować tylko raz i jest inicjowane w deklaracji za pomocą jednej instancji klasy klasy. Konstruktor jest oznaczony jako prywatny, aby zapobiec zewnętrznym tworzeniu instancji klasy, a właściwość instancji zapewnia sposób na dostęp do pojedynczej instancji klasy i jest oznaczony jako statyczny, dzięki czemu można uzyskać dostęp bez tworzenia instancji klasy klasy.

W C# Wzorzec singleton jest zwykle wdrażany przy użyciu prywatnego konstruktora, statycznego pola instancji oraz publicznej właściwości statycznej lub metody dostępu do instancji. Podstawową ideą jest upewnienie się, że tylko jedna instancja klasy może istnieć poprzez kontrolowanie jej instancji i dostępu, oto przykładowy kod, który pokazuje tworzenie i wykorzystanie wzorca projektowania singleton w C#:

za pomocą systemu;
// Zdefiniuj klasę kalkulatora za pomocą prywatnego konstruktora i statycznego pola instancji
Kalkulator klasy publicznej

prywatna instancja kalkulatora statycznego;
Private Calculator () // prywatny konstruktor zapobiega tworzeniu tworzenia klas kalkulatorów spoza samej klasy
// Zdefiniuj właściwość instancji, która tworzy nowy obiekt kalkulatora, jeśli ktoś już nie istnieje i zwraca
publiczne statyczne instancję kalkulatora

Dostawać

if (instance == null) // Sprawdź, czy obiekt kalkulatora został już utworzony

instance = nowy kalkulator (); // jeśli nie, utwórz nowy obiekt kalkulatora i przypisz go do pola instancji

Instancja powrotu;

public int add (int x, int y)

zwrócić x + y;

// Zdefiniuj metodę odejmowania, która odejmuje jedną liczbę całkowitą od drugiej i zwraca wynik
public int odejmowanie (int x, int y)

powrót x - y;


// Zdefiniuj klasę programu za pomocą głównej metody
Program klasowy

Statyczne pustka główna (String [] args)

Kalkulator calc = kalkulator.Instancja; // Pobierz instancję obiektu kalkulatora za pomocą właściwości instancji
int wynik1 = calc.Dodaj (5, 7); // Użyj metody dodawania, aby dodać 5 i 7 razem
Konsola.WriteLine ($ "wynik1: wynik1"); // Wydaj wynik dodatku do konsoli
int wynik2 = calc.Odejmować (10, 3); // użyj metody odejmowania, aby odjąć 3 od 10
Konsola.WriteLine ($ "wynik2: wynik2"); // Wydaj wynik odejmowania do konsoli

W tym przykładzie klasa kalkulatora jest zdefiniowana za pomocą prywatnego konstruktora i statycznego pola instancji. Prywatny konstruktor uniemożliwia instancję klasy spoza samej klasy, podczas gdy pole statyczne zapewnia, że ​​tylko jeden przypadek klasy może istnieć.

Klasa kalkulatora zawiera również właściwość instancji, która tworzy nowy obiekt kalkulatora, jeśli ktoś już nie istnieje, i zwraca go. Po raz pierwszy wywołanie właściwości instancji tworzy nowy obiekt kalkulatora i przypisuje go do pola instancji, wszelkie kolejne wywołania właściwości instancji po prostu zwracają istniejący obiekt kalkulatora.

Klasa kalkulatora zawiera również metody dodawania i odejmowania, które wykonują podstawowe operacje arytmetyczne i zwracają wynik. Metody te są po prostu uwzględnione jako przykład rodzaju funkcjonalności, którą może zapewnić klasa kalkulatora.

Wreszcie klasa programu zawiera główną metodę, która tworzy instancję klasy kalkulatora za pomocą właściwości instancji i wykorzystuje metody dodawania i odejmowania do wykonania niektórych prostych obliczeń. Wyniki tych obliczeń są następnie wyprowadzane do konsoli za pomocą konsoli.Metoda pisania.

Jeśli spróbujemy utworzyć nową instancję klasy kalkulatora za pomocą domyślnego konstruktora. To nie zadziała, ponieważ konstruktor klasy kalkulatora jest prywatny, co zapobiega tworzeniu nowych instancji poza klasą.

Aby zademonstrować, utworzyłem nową instancję klasy kalkulatora za pomocą właściwości instancji klasy, a na wyjściu będzie błąd, który stwierdza, że ​​klasa jest niedostępna ze względu na jej poziom ochrony:

Pokazując, że nowe instancje są odrzucane przez wzór Singleton w C#, ten przykład pokazuje, w jaki sposób wzór singletonu zapewnia, że ​​tylko jedna instancja klasowa jest tworzona i utrzymywana w całym programie.

Wniosek

Wzór singletonu jest często używany w sytuacjach, w których pojedynczy obiekt musi koordynować działania w całym systemie, takie jak usługa rejestrowania lub połączenie bazy danych. Wzór jest wdrażany za pomocą prywatnego konstruktora i właściwości statycznej, która zwraca jedną instancję klasy, ten artykuł zawiera szczegółowe wyjaśnienie tego wzoru.