0Pricing
Kotlin Academy · Lektion

Factory-Methoden mit companion object

Implementieren Sie Factory-Patterns mit companion object und dem invoke-Operator.

Factory-Methoden mit companion object ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Das Factory-Method-Pattern

Factory-Methoden erzeugen Objekte mit aussagekräftigen Namen und eigener Logik und verbergen die Komplexität von Konstruktoren. Das Companion-Objekt von Kotlin ist der ideale Ort dafür.

Privater Konstruktor + Factory

Machen Sie den Konstruktor privat und stellen Sie Factory-Methoden über das Companion-Objekt bereit.
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()

Benannte Factory-Methoden

Aussagekräftige Namen machen die Absicht deutlich – anders als überladene Konstruktoren.
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)

Null aus einer Factory zurückgeben

Factorys können bei ungültigen Eingaben null zurückgeben, statt eine Exception auszulösen.
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")

Zwischengespeicherte Instanzen

Factorys können Instanzen zwischenspeichern und wiederverwenden.
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())
        }
    }
}

invoke-Operator als konstruktorähnliche Factory

Definieren Sie invoke(), um die Klasse wie eine Funktion aufzurufen.
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

Abstrakte Factory mit versiegelten Klassen

Kombinieren Sie Factory-Methoden mit versiegelten Klassenhierarchien, um typisierte Objekte zu erzeugen.
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)
    }
}

Abhängigkeitsbewusste Factory

Factorys können Abhängigkeiten entgegennehmen und miteinander verbinden.
class Repository(private val db: Database) {
    companion object {
        fun create(db: Database = Database.instance) = Repository(db)
    }
    fun findAll() = db.query("SELECT * FROM items")
}

Factorys in Tests

Factory-Methoden machen die Erstellung von Testobjekten übersichtlich und explizit.
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)
    }
}

Aus JSON/Konfiguration

Factorys sind natürliche Einstiegspunkte für das Parsen.
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
        )
    }
}

Wann Sie KEINEN privaten Konstruktor verwenden sollten

Machen Sie Konstruktoren nicht nur aus Stilgründen privat. Verwenden Sie einen privaten Konstruktor, wenn eine Validierung erforderlich ist, Caching benötigt wird oder mehrere Erzeugungspfade unterschiedliche Bedeutungen haben.

Kurztest

Welche Operatorfunktion ermöglicht den Aufruf eines Companion-Objekts wie eines Konstruktors: Email("a@b.com")?

Zusammenfassung

Factory-Methoden in Companion-Objekten: privater Konstruktor und benannte Factorys, optionale Rückgabe von null, Caching und invoke() für konstruktorähnliche Syntax. Factorys machen die Objekterzeugung sicher, ausdrucksstark und testbar!

Häufig gestellte Fragen

Ist die Lektion „Factory-Methoden mit companion object“ kostenlos?

Ja — der vollständige Text von „Factory-Methoden mit companion object“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Factory-Methoden mit companion object“?

Implementieren Sie Factory-Patterns mit companion object und dem invoke-Operator. Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Kotlin Academy zu starten?

Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Factory-Methoden mit companion object“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?

Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. object-Deklaration: Kotlin-Singletons
  2. companion object: Statische Member in Kotlin
  3. Anonyme Objekte und Object Expressions
  4. Factory-Methoden mit companion object
← Zurück zu Kotlin Academy