hit tracker
Jak możemy Ci pomóc?
  • Home
  • Artykuły
  • Add A Private Constructor To Hide The Implicit Public One

Add A Private Constructor To Hide The Implicit Public One

Add A Private Constructor To Hide The Implicit Public One

Hej studenci!

Dzisiaj pogadamy o ukrywaniu konstruktorów. Brzmi groźnie? Spokojnie, zaraz wszystko stanie się jasne.

Zaczniemy od podstaw. Czym jest konstruktor?

Konstruktor, czyli budowniczy obiektów

Wyobraź sobie, że masz przepis na ciasto. Ten przepis to klasa.

A samo ciasto, które upiekłeś zgodnie z przepisem, to obiekt.

Konstruktor to taka specjalna funkcja w klasie. Używana jest do tworzenia (inicjalizacji) nowych obiektów tej klasy.

Myśl o nim jak o głównym kucharzu, który przygotowuje ciasto od podstaw.

Ma on zawsze taką samą nazwę jak klasa.

Domyślny konstruktor

Jeśli nie napiszesz żadnego konstruktora, kompilator zrobi to za Ciebie. To tak zwany domyślny konstruktor.

Jest publiczny i nie przyjmuje żadnych argumentów. Czyli każdy może go użyć.

Działa jakby bez przepisu. Po prostu powstaje puste ciasto.

Ukrywanie konstruktora

Ale co, jeśli nie chcemy, żeby każdy mógł tworzyć obiekty naszej klasy, jak mu się podoba?

Wtedy możemy ukryć domyślny konstruktor.

Jak?

Robimy go prywatnym (private).

Konstruktor prywatny (private constructor)

Konstruktor prywatny jest dostępny tylko wewnątrz samej klasy. Nikt z zewnątrz nie może go wywołać bezpośrednio.

Czyli nikt spoza naszej kuchni nie może upiec naszego ciasta.

Przykład:

Załóżmy, że mamy klasę Logger. Służy ona do zapisywania logów w programie.

Chcemy, żeby istniała tylko jedna instancja Loggera (tzw. singleton).

Nie chcemy, żeby ktoś tworzył wiele Loggerów.

W takim przypadku możemy zrobić konstruktor prywatny.

Kod (Java):

public class Logger {

private static Logger instance;

private Logger() {

// Inicjalizacja loggera

}

public static Logger getInstance() {

if (instance == null) {

instance = new Logger();

}

return instance;

}

public void log(String message) {

// Zapisywanie loga

}

}

Co tu się dzieje?

Konstruktor private Logger() {} jest prywatny. Nie można go wywołać spoza klasy Logger.

Metoda getInstance() jest statyczna i publiczna. Zwraca jedyną instancję Loggera. Jeśli instancja jeszcze nie istnieje, to ją tworzy, używając prywatnego konstruktora.

Teraz, żeby użyć Loggera, nie robimy tak:

Logger logger = new Logger(); // Błąd!

Tylko tak:

Logger logger = Logger.getInstance();

W ten sposób mamy pewność, że istnieje tylko jedna instancja Loggera.

Kiedy ukrywać konstruktor?

Ukrywamy konstruktor w kilku przypadkach:

  1. Singleton: Tak jak w przykładzie z Loggerem. Chcemy mieć tylko jedną instancję klasy.
  2. Klasy narzędziowe (utility classes): Klasy, które zawierają tylko statyczne metody. Nie chcemy, żeby ktoś tworzył obiekty takiej klasy. Np. klasa Math w Javie.
  3. Kontrolowane tworzenie obiektów: Chcemy kontrolować proces tworzenia obiektów. Możemy wtedy udostępnić statyczne metody fabrykujące (factory methods), które tworzą obiekty zgodnie z naszymi zasadami.

Klasy narzędziowe

Wyobraź sobie klasę, która ma tylko funkcje matematyczne. Np. przelicza waluty.

Nie ma sensu tworzyć obiektu takiej klasy. Chcemy po prostu używać jej funkcji (metod).

Wtedy robimy wszystkie metody statyczne i ukrywamy konstruktor.

Kod (Java):

public class CurrencyConverter {

private CurrencyConverter() {

// Ukryty konstruktor

}

public static double convert(double amount, String fromCurrency, String toCurrency) {

// Przeliczanie walut

return 0.0; // Placeholder

}

}

Użycie:

double pln = CurrencyConverter.convert(100, "USD", "PLN");

Nie tworzymy obiektu CurrencyConverter.

Statyczne metody fabrykujące

Czasami chcemy mieć większą kontrolę nad tworzeniem obiektów.

Możemy użyć statycznych metod, które tworzą obiekty zgodnie z pewnymi zasadami.

Np. możemy mieć klasę Person, która ma prywatny konstruktor.

A do tworzenia obiektów Person używamy metod createAdult i createChild. Każda z tych metod ustawia odpowiednie wartości w obiekcie Person.

To daje nam pewność, że obiekty Person są tworzone w kontrolowany sposób.

Podsumowanie

Konstruktor prywatny to potężne narzędzie. Pozwala nam kontrolować proces tworzenia obiektów.

Używamy go w przypadkach, gdy:

  • Chcemy mieć tylko jedną instancję klasy (singleton).
  • Mamy klasę narzędziową z samymi statycznymi metodami.
  • Chcemy kontrolować tworzenie obiektów za pomocą statycznych metod fabrykujących.

Pamiętaj, że brak możliwości utworzenia obiektu z zewnątrz klasy może być bardzo przydatne w wielu sytuacjach. To zwiększa bezpieczeństwo i kontrolę nad Twoim kodem.

Powodzenia w programowaniu!

Add a private constructor to hide the implicit public one · Issue #2 Add A Private Constructor To Hide The Implicit Public One
How to have private constructors and private setters when using Entity Add A Private Constructor To Hide The Implicit Public One
Unit 9 Transformations Homework 1 Translations Answer Key
Geometry Module 1 Transformations And Symmetry Answer Key