Singleton Design Pattern là một trong những mẫu thiết kế creational pattern trong lập trình phần mềm. Mục tiêu của nó là đảm bảo rằng một lớp chỉ có một thể hiện (instance) duy nhất và cung cấp một điểm truy cập toàn cục đến thể hiện đó.

Điểm quan trọng của Singleton là sự hạn chế việc tạo ra nhiều thể hiện của một lớp, giúp tiết kiệm tài nguyên và đồng thời giữ cho trạng thái của đối tượng duy nhất được duy trì trong toàn bộ ứng dụng.

Một số yếu tố chính của Singleton Pattern:

  1. Constructor private: Để ngăn chặn việc tạo ra các thể hiện mới từ bên ngoài, constructor của lớp được đặt là private hoặc protected.
  2. Static method để truy cập thể hiện: Một phương thức static được cung cấp để truy cập thể hiện của lớp, thường được gọi là getInstance().
  3. Biến static để lưu trữ thể hiện: Một biến static được sử dụng để lưu trữ thể hiện duy nhất của lớp.

Dưới đây là một ví dụ cơ bản về cách triển khai Singleton Design Pattern trong Kotlin:

object Singleton {
    init {
        println("Singleton instance created")
    }

    fun doSomething() {
        println("Singleton is doing something")
    }
}

fun main() {
    // Không thể tạo ra một thể hiện mới bằng cách sử dụng constructor vì nó private
    // val singleton = Singleton() // Error

    // Truy cập thể hiện duy nhất thông qua phương thức getInstance()
    val singletonInstance = Singleton

    // Gọi phương thức của Singleton
    singletonInstance.doSomething()
}

Trong ví dụ này, lớp Singleton được triển khai bằng cách sử dụng một object declaration trong Kotlin, đảm bảo rằng chỉ có một thể hiện được tạo ra. Phương thức doSomething() có thể được gọi từ mọi nơi trong code mà không cần phải tạo ra một thể hiện mới của lớp Singleton.