Назад к вопросам
Junior
139
questionbank
Расскажите о паттерне проектирования Singleton (Одиночка).
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Паттерн проектирования Singleton гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
Плюсы:
- Контролируемый доступ к единственному экземпляру.
- Экономия ресурсов при создании дорогостоящего объекта.
- Разрешает обращение к экземпляру из любого места программы.
Минусы:
- Нарушает принцип единственной ответственности (класс отвечает и за логику, и за управление своим экземпляром).
- Может затруднять тестирование (сложно подменить "одиночку" на mock).
- Создает сильную связанность в коде.
Реализации в Golang:
Конкурентно-безопасная реализация с использованием sync.Once:
package main
import (
"fmt"
"sync"
)
type singleton struct{}
var instance *singleton
var once sync.Once
func GetInstance() *singleton {
once.Do(func() {
instance = &singleton{}
fmt.Println("Singleton instance created") // Для демонстрации создания
})
return instance
}
func main() {
s1 := GetInstance()
s2 := GetInstance()
if s1 == s2 {
fmt.Println("Both instances are the same")
} else {
fmt.Println("Instances are different")
}
}
Эта реализация гарантирует, что инициализация (создание экземпляра) произойдет только один раз, даже при параллельных вызовах GetInstance. sync.Once — наиболее предпочтительный способ реализации Singleton в Golang.