Прежде всего, необходимо понять, что такое шаблоны проектирования. Вот ссылка на мою среднюю статью для того же.
Она очень кратко описывает введение в шаблоны проектирования. Пожалуйста, проверьте это, если вы совсем новичок в разработке шаблонов.
Синглтон — это шаблон проектирования, который гарантирует, что класс может иметь только один объект. Следовательно, шаблон Singleton ограничивает класс только одним экземпляром.
Есть большая вероятность, что вы уже использовали шаблон Singleton в Swift. Следующие примеры могут выглядеть похожими, если вы работали с фреймворком Apple.
// Shared URL Session let sharedURLSession = URLSession.shared // Default File Manager let defaultFileManager = FileManager.default // Standard User Defaults let standardUserDefaults = UserDefaults.standard // Default Payment Queue let defaultPaymentQueue = SKPaymentQueue.default()
Прежде чем двигаться дальше, важно знать роль static variables
.
Статические переменные — это те переменные, значения которых являются общими для всех экземпляров или объектов класса. Когда мы определяем любую переменную как статическую, она привязывается к классу, а не к объекту.
Как реализовать класс Singleton?
Давайте создадим класс Singleton
со статической переменной shared
и функцией businessLogic
, которая выполняет за нас какую-то задачу.
class Singleton { static let shared = Singleton() // yes, private init!!! private init() {} func businessLogic() { // some business logic print("Business Logic Successfully implemented") } }
Обратите внимание, что мы использовали инициализатор private
для init(). Теперь мы пишем код для использования Singleton.
Singleton.shared.businessLogic()
Вывод ожидаемый, он запускает функцию businessLogic
. Мы видим Бизнес-логика успешно реализована, напечатанную в консоли.
Теперь давайте попробуем создать еще один экземпляр класса Singleton
.
let anotherInstance = Singleton()
Xcode IDE сразу показывает ошибку:
Обратите внимание, что мы использовали инициализатор private
для init() в нашем классе Singleton
. Итак, если вы попытаетесь создать новый экземпляр класса Singleton
, он выдаст ошибку. Следовательно, принцип Singleton pattern
(только один экземпляр класса) проверен.
Плюсы одноэлементного паттерна
- Существует только один экземпляр класса, в этом мы можем быть уверены. Существует только один экземпляр класса, в этом мы можем быть уверены.
- Однократная инициализация
Минусы одноэлементного шаблона
- Объект singleton имеет глобальный доступ. Это означает, что к одноэлементному объекту можно получить доступ из любой точки проекта.
- Шаблон Singleton нарушает принцип единой ответственности
Если вы нашли эту статью полезной, пожалуйста, поделитесь этой историей, подпишитесь на меня в среде и поаплодируйте 👏. Спасибо!