Published on

Swiftda Singleton

Authors

Swiftda Singleton β€” bu classning faqat bitta obyektga ega bo'lishini ta'minlaydigan dizayn patterni. Bunday class singleton class deyiladi.

Singleton class yaratish uchun ba'zi qoidalarga rioya qilishimiz kerak:

1. Private Initializer yaratish

Initializer classdan obyekt yaratish imkonini beradi. Va classning initializerini private qilish class tashqarisidan obyekt yaratishni cheklaydi.

class FileManager {
 
  ... 
  // private initializer yaratish
  private init() {
  }
}

// Xato kod
let obj = FileManager()

Bu yerda FileManager classining initializeri private. Shuning uchun class tashqarisidan FileManager obyektini yaratishga uringanimizda xato olamiz.

2. Static turli Singleton obyekt yaratish

Singleton classda classning bitta static turli obyektini yaratamiz. Obyektni static qilish class nomi yordamida obyektga murojaat qilish imkonini beradi.

class FileManager {
  
  // singleton yaratish uchun static property
  static let fileObj = FileManager()
  ... 
}

// singletonga murojaat
let data = FileManager.fileObj

Bu yerda FileManager class nomi yordamida fileObj obyektiga murojaat qilyapmiz.

Misol:

class FileManager{

 // singleton yaratish
 static let fileObj = FileManager()

 // private initializer yaratish
private init() {
  
}

 // fayl so'rash uchun metod
func checkFileAccess(user: String) {

  // foydalanuvchi nomini tekshirish sharti
  if user == ("@programiz.com") {  

    print("Kirish ruxsat etildi")
  }

  else {
    print("Kirish rad etildi")
  }
}
}

let userName = "@programiz.com"

// metodga murojaat
let file = FileManager.fileObj

file.checkFileAccess(user: userName)

Natija:

Kirish ruxsat etildi

Yuqoridagi misolda singleton class FileManager yaratdik. Singleton class bo'lgani uchun initializerni private qildik va fileObj nomli static obyekt yaratdik.

Quyidagi qatorga e'tibor bering:

var file = FileManager.fileObj
file.checkFileAccess(user: userName)

Bu yerda FileManager class nomi yordamida fileObj obyektiga murojaat qildik. Keyin checkFileAccess() metodiga murojaat qildik.

Dizayn pattern β€” bu butun dunyo dasturchilar tomonidan qo'llaniladigan turli kodlash usullarini o'z ichiga olgan kod kutubxonasi kabi.

Shuni ta'kidlash kerakki, singletonlardan foydalanish mantiqiy bo'lgan vaziyatlar kam (masalan, fayllarni boshqarish, API so'rovlari). Agar singletonlardan foydalanish kerakmi yoki yo'qligiga ishonchingiz komil bo'lmasa, ulardan butunlay foydalanmaslikni tavsiya qilamiz. Ko'proq ma'lumot: What is so bad about Singleton?