0Pricing
Kotlin Academy · บทเรียน

การประกาศ object: Singleton ของ Kotlin

สร้าง singleton ด้วย object และทำความเข้าใจวงจรชีวิต

การประกาศ object: Singleton ของ Kotlin เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

object ในฐานะซิงเกิลตัน

การประกาศ object จะสร้างอินสแตนซ์เดียว ซึ่งเป็นซิงเกิลตันที่ปลอดภัยต่อเธรดและเริ่มต้นแบบขี้เกียจได้ด้วยโค้ดเพียงบรรทัดเดียว

การประกาศซิงเกิลตัน

ใช้ object Name { ... } เพื่อประกาศซิงเกิลตันที่มีสถานะและเมธอด

object Logger {
    fun log(msg: String) = println("[LOG] $msg")
}
fun main() {
    Logger.log("App started")
    Logger.log("User signed in")
}

สถานะของซิงเกิลตัน

ซิงเกิลตันสามารถเก็บสถานะที่แก้ไขได้ ซึ่งเข้าถึงได้จากทุกที่และใช้ร่วมกันทั่วทั้งโปรแกรม

object Counter {
    var count = 0
    fun increment() { count++ }
}
fun main() {
    Counter.increment()
    Counter.increment()
    Counter.increment()
    println(Counter.count) // 3
}

การเริ่มต้นแบบขี้เกียจ

อินสแตนซ์เดียวจะถูกสร้างขึ้นเมื่อมีการเข้าถึงครั้งแรกเท่านั้น ไม่เคยสร้างเร็วกว่านั้น JVM รับประกันว่าการทำงานนี้ปลอดภัยต่อเธรด

object Heavy {
    init { println("Initializing Heavy...") }
    fun work() = "done"
}
fun main() {
    println("Before access")
    println(Heavy.work()) // triggers init now
    println(Heavy.work()) // no init again
}

การใช้งานส่วนติดต่อ

ซิงเกิลตันสามารถใช้งานส่วนติดต่อได้ ซึ่งมีประโยชน์สำหรับการเรียกกลับและกลยุทธ์

interface Greeter { fun greet(name: String): String }
object EnglishGreeter : Greeter {
    override fun greet(name: String) = "Hello, $name!"
}
fun main() {
    println(EnglishGreeter.greet("Ada"))
}

การสืบทอดคลาส

ออบเจ็กต์สามารถสืบทอดจากคลาสที่เปิดให้สืบทอดได้เช่นกัน

open class Animal(val sound: String) {
    fun makeSound() = "The animal says $sound"
}
object Cat : Animal("Meow")
fun main() {
    println(Cat.makeSound())
}

การใช้งานจริง: การกำหนดค่า

ซิงเกิลตันเหมาะอย่างยิ่งสำหรับการกำหนดค่าทั่วทั้งแอปที่ไม่เปลี่ยนแปลงหลังเริ่มต้นระบบ

object AppConfig {
    val apiUrl = "https://api.example.com"
    val timeout = 5000
    val version = "1.0.0"
}
fun main() {
    println("v${AppConfig.version} -> ${AppConfig.apiUrl}")
}

การใช้งานจริง: ฟังก์ชันอรรถประโยชน์

จัดกลุ่มตัวช่วยที่ไม่มีสถานะซึ่งเกี่ยวข้องกันไว้ใน object ในรูปแบบเมธอดคล้ายแบบคงที่ที่มีเนมสเปซ

object StringUtils {
    fun reverse(s: String) = s.reversed()
    fun capitalize(s: String) = s.replaceFirstChar { it.uppercase() }
}
fun main() {
    println(StringUtils.reverse("Kotlin"))
    println(StringUtils.capitalize("hello"))
}

ความเท่ากันและเอกลักษณ์

มีอินสแตนซ์เพียงหนึ่งเดียว ดังนั้น === จึงคืนค่าเป็น true เสมอสำหรับการอ้างอิงออบเจ็กต์เดียวกัน

object MySingleton
fun main() {
    val a = MySingleton
    val b = MySingleton
    println(a === b) // true
}

object เทียบกับคลาส

class ทั่วไปต้องสร้างอินสแตนซ์ ส่วน object คือตัวอินสแตนซ์เอง จึงไม่มีการเรียกใช้ตัวสร้าง

class Service { fun ping() = "pong (class)" }
object SingletonService { fun ping() = "pong (object)" }
fun main() {
    val s = Service() // instance per call
    println(s.ping())
    println(SingletonService.ping()) // no instantiation
}

ความปลอดภัยของเธรด

การสร้างอินสแตนซ์ของซิงเกิลตันปลอดภัยต่อเธรดตามการรับประกันของการโหลดคลาสโดย JVM ส่วนสถานะที่แก้ไขได้ซึ่งคุณเพิ่มไว้ภายในนั้นเป็นความรับผิดชอบของคุณ

object SharedCounter {
    @Volatile var count = 0
    @Synchronized fun inc() { count++ }
}
fun main() {
    repeat(1000) { SharedCounter.inc() }
    println(SharedCounter.count) // 1000
}

ตรวจสอบอย่างรวดเร็ว

การประกาศ object ของ Kotlin มีอินสแตนซ์อยู่กี่ตัว

สรุปทบทวน

object Name { ... } ประกาศซิงเกิลตันที่เริ่มต้นแบบขี้เกียจและปลอดภัยต่อเธรด พร้อมสถานะ เมธอด ส่วนติดต่อ และการสืบทอด ใช้ออบเจ็กต์สำหรับการกำหนดค่า กลุ่มฟังก์ชันอรรถประโยชน์ และบริการที่ไม่มีสถานะ

คำถามที่พบบ่อย

บทเรียน “การประกาศ object: Singleton ของ Kotlin” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การประกาศ object: Singleton ของ Kotlin” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การประกาศ object: Singleton ของ Kotlin”

สร้าง singleton ด้วย object และทำความเข้าใจวงจรชีวิต คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การประกาศ object: Singleton ของ Kotlin” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม

ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การประกาศ object: Singleton ของ Kotlin
  2. companion object: สมาชิกคล้าย Static ใน Kotlin
  3. ออบเจ็กต์นิรนามและนิพจน์ออบเจ็กต์
  4. เมธอด Factory ด้วย companion object
← กลับไปที่ Kotlin Academy