Kotlin Academy · Pelajaran

Kaedah Kilang dengan companion object

Laksanakan corak kilang menggunakan companion object dan operator invoke.

Pelajaran 4 daripada 413 langkah

Kaedah Kilang dengan companion object ialah pelajaran Kotlin Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kotlin Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Corak Kaedah Kilang

Kaedah kilang mencipta objek dengan nama dan logik yang bermakna sambil menyembunyikan kerumitan pembina. Objek pendamping Kotlin ialah tempat yang sesuai untuk kaedah ini.

Pembina Peribadi + Kilang

Jadikan pembina itu peribadi dan sediakan kaedah kilang melalui objek pendamping.
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()

Kaedah Kilang Bernama

Nama yang deskriptif menjelaskan tujuan dengan terang — tidak seperti lebihan beban pembina.
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)

Memulangkan Null daripada Kilang

Kilang boleh memulangkan null untuk input yang tidak sah, bukannya melontarkan pengecualian.
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")

Instans yang Dicache

Kilang boleh menyimpan dalam cache dan menggunakan semula instans.
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 sebagai Kilang Seperti Pembina

Tentukan invoke() supaya kelas boleh dipanggil seperti fungsi.
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

Kilang Abstrak dengan Kelas Termeterai

Gabungkan kaedah kilang dengan hierarki kelas termeterai untuk penciptaan yang mempunyai jenis.
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)
    }
}

Kilang Berasaskan Kebergantungan

Kilang boleh menerima kebergantungan dan menyambungkannya.
class Repository(private val db: Database) {
    companion object {
        fun create(db: Database = Database.instance) = Repository(db)
    }
    fun findAll() = db.query("SELECT * FROM items")
}

Kilang dalam Ujian

Kaedah kilang menjadikan penciptaan objek ujian kemas dan jelas.
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)
    }
}

Daripada JSON/Config

Kilang ialah titik masuk semula jadi untuk penghuraian.
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
        )
    }
}

Bila NOT Patut Menggunakan Pembina Peribadi

Jangan jadikan pembina peribadi hanya demi gaya. Gunakannya apabila pengesahan diperlukan, caching diperlukan atau laluan penciptaan yang berbilang mempunyai semantik yang berbeza.

Semakan Pantas

Apakah fungsi operator yang membolehkan objek pendamping dipanggil seperti pembina: Email("a@b.com")?

Ringkasan

Kaedah kilang dalam objek pendamping: pembina peribadi + kilang bernama, pemulangan null pilihan, caching dan invoke() untuk sintaks seperti pembina. Kilang menjadikan penciptaan objek selamat, jelas dan mudah diuji!
Percuma untuk bermula

Pelajari Kotlin dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Kaedah Kilang dengan companion object” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Kotlin Academy, termasuk “Kaedah Kilang dengan companion object”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Kaedah Kilang dengan companion object”?

Laksanakan corak kilang menggunakan companion object dan operator invoke. Anda berlatih Kotlin Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Kotlin Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Kotlin Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Kaedah Kilang dengan companion object” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pengisytiharan object: Singleton Kotlin
  2. companion object: Ahli Seakan-Statik dalam Kotlin
  3. Objek Tanpa Nama dan Ungkapan Objek
  4. Kaedah Kilang dengan companion object
← Kembali ke Kotlin Academy