Singleton เป็นแบบต่อต้าน?

Apr 02 2023
ฉันจะเล่าเรื่องสั้น ๆ ให้คุณฟังที่นี่ ซิงเกิลตันคืออะไร? รูปแบบ singleton เป็นวิธีที่คุณจะมีหนึ่งอินสแตนซ์จากคลาสเฉพาะในแอปพลิเคชันทั้งหมดและให้การเข้าถึงจุดเดียว

ฉันจะเล่าเรื่องสั้น ๆ ให้คุณฟังที่นี่

ซิงเกิลตันคืออะไร?

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

วิธีการเขียนซิงเกิล?

ตัวอย่าง:

final class Logs {
 static let shared = Logs()
 private init() {}
 func printLog(_ log:String) {
  print("here we do: ===\(log)===")
  }
}

เราสามารถใช้ singleton นี้ได้จากทุกที่ในโปรแกรม เพราะเราต้องพิมพ์บันทึกทุกที่ในแอปโดยใช้รูปแบบเดียวกัน

Logs.shared.printLog("inside ViewModel and loading some feeds")

URLSession.shared

UserDefaults.standard

Singleton สามารถทดสอบได้หรือไม่

อันที่จริง ไม่ หากคุณไม่ได้ใช้ ทำการเปลี่ยนแปลงนี้ :

Global Mutable Shared State : ดังนั้นคุณจะใช้var คงที่เช่น , public init

ดีแต่อันตราย' เพราะคุณสามารถเปลี่ยนได้มากกว่าหนึ่งเธรด

ฉันจะใช้ซิงเกิลตันได้ที่ไหน

ด้วยคลาสที่บันทึกข้อความไปยังคอนโซลตามที่เราเห็นในตัวอย่างก่อนหน้า

จะเพิ่ม Logic ใน Singleton ได้อย่างไร

ส่วนขยาย

คลาสย่อย

วิธีจัดการกับซิงเกิลตันจากเฟรมเวิร์กของบุคคลที่สาม

ใช้การผกผันการพึ่งพาโดยใช้โปรโตคอล / การปิด (อินเทอร์เฟซ)

ซิงเกิ้ลตันก็โอเค แต่ถ้าคุณไม่ระวัง สิ่งเหล่านี้ไม่ได้เป็นเพียงการต่อต้านแบบแผนเท่านั้น อาจเป็นอันตรายได้!