0Pricing
Kotlin Academy · Lekcja

Metody fabrykujące z companion object

Implementuj wzorce fabrykujące za pomocą companion object i operatora invoke.

Metody fabrykujące z companion object to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Wzorzec metody fabrykującej

Metody fabrykujące tworzą obiekty za pomocą znaczących nazw i logiki, ukrywając złożoność konstruktora. Obiekt towarzyszący w Kotlinie jest idealnym miejscem na ich umieszczenie.

Prywatny konstruktor + fabryka

Ustaw konstruktor jako prywatny i udostępnij metody fabrykujące za pośrednictwem obiektu towarzyszącego.
class Token private constructor(val value: String) {
    companion object {
        fun generate() = Token(java.util.UUID.randomUUID().toString())
        fun fromString(s: String) = Token(s.trim())
    }
}
val t = Token.generate()

Nazwane metody fabrykujące

Opisowe nazwy jasno wskazują intencję — w przeciwieństwie do przeciążonych konstruktorów.
class Duration private constructor(val ms: Long) {
    companion object {
        fun ofMillis(ms: Long) = Duration(ms)
        fun ofSeconds(s: Long) = Duration(s * 1000)
        fun ofMinutes(m: Long) = Duration(m * 60_000)
    }
}
val d = Duration.ofMinutes(5)

Zwracanie wartości null z fabryki

Fabryki mogą zwracać wartość null dla nieprawidłowych danych wejściowych zamiast zgłaszać wyjątek.
class Percentage private constructor(val value: Int) {
    companion object {
        fun of(value: Int): Percentage? {
            return if (value in 0..100) Percentage(value) else null
        }
    }
}
val p = Percentage.of(75) ?: error("Invalid")

Buforowane instancje

Fabryki mogą buforować instancje i używać ich ponownie.
class Direction private constructor(val name: String) {
    companion object {
        private val cache = mutableMapOf<String, Direction>()
        fun of(name: String) = cache.getOrPut(name.uppercase()) {
            Direction(name.uppercase())
        }
    }
}

Operator invoke jako fabryka przypominająca konstruktor

Zdefiniuj funkcję invoke(), aby wywoływać klasę jak funkcję.
class Email private constructor(val address: String) {
    companion object {
        operator fun invoke(raw: String): Email {
            require("@" in raw) { "Invalid email" }
            return Email(raw.lowercase())
        }
    }
}
val e = Email("Test@Example.com")  // looks like a constructor

Fabryka abstrakcyjna z klasami sealed

Połącz metody fabrykujące z hierarchiami klas sealed, aby tworzyć obiekty z zachowaniem typów.
sealed class Shape {
    data class Circle(val r: Double) : Shape()
    data class Rect(val w: Double, val h: Double) : Shape()
    companion object {
        fun circle(r: Double) = Circle(r)
        fun rect(w: Double, h: Double) = Rect(w, h)
    }
}

Fabryka uwzględniająca zależności

Fabryki mogą przyjmować zależności i konfigurować je.
class Repository(private val db: Database) {
    companion object {
        fun create(db: Database = Database.instance) = Repository(db)
    }
    fun findAll() = db.query("SELECT * FROM items")
}

Fabryka w testach

Metody fabrykujące sprawiają, że tworzenie obiektów testowych jest przejrzyste i jednoznaczne.
class Order private constructor(
    val id: Long, val items: List<String>, val paid: Boolean
) {
    companion object {
        fun unpaid(id: Long, items: List<String>) = Order(id, items, false)
        fun paid(id: Long, items: List<String>) = Order(id, items, true)
    }
}

Z JSON-u lub konfiguracji

Fabryki są naturalnym punktem wejścia do analizowania danych.
class AppConfig private constructor(
    val baseUrl: String, val timeout: Int
) {
    companion object {
        fun fromEnv() = AppConfig(
            baseUrl = System.getenv("BASE_URL") ?: "http://localhost",
            timeout = System.getenv("TIMEOUT")?.toInt() ?: 30
        )
    }
}

Kiedy NIE używać prywatnego konstruktora

Nie ustawiaj konstruktorów jako prywatnych wyłącznie ze względów stylistycznych. Używaj tego rozwiązania, gdy wymagana jest walidacja, potrzebne jest buforowanie albo różne ścieżki tworzenia mają odmienne znaczenie.

Szybkie sprawdzenie

Jaka funkcja operatora umożliwia wywoływanie obiektu towarzyszącego jak konstruktora: Email("a@b.com")?

Podsumowanie

Metody fabrykujące w obiektach towarzyszących: prywatny konstruktor i nazwane fabryki, opcjonalne zwracanie wartości null, buforowanie oraz invoke() dla składni przypominającej konstruktor. Fabryki sprawiają, że tworzenie obiektów jest bezpieczne, wyraziste i łatwe do testowania!

Często zadawane pytania

Czy lekcja „Metody fabrykujące z companion object” jest bezpłatna?

Tak — pełny tekst „Metody fabrykujące z companion object” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Metody fabrykujące z companion object”?

Implementuj wzorce fabrykujące za pomocą companion object i operatora invoke. Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Metody fabrykujące z companion object”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?

Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Deklaracja object: singletony w Kotlinie
  2. companion object: elementy podobne do statycznych w Kotlinie
  3. Obiekty anonimowe i wyrażenia object
  4. Metody fabrykujące z companion object
← Powrót do Kotlin Academy