Назад к вопросам
Junior
118
questionbank
Расскажи о паттерне проектирования Singleton.
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Паттерн проектирования Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа. В Go обычно реализуется через пакет sync (sync.Once) для обеспечения потокобезопасности.
Плюсы:
- Контролируемый доступ к единственному экземпляру.
- Позволяет сэкономить ресурсы, избегая создания множества одинаковых объектов.
Минусы:
- Может затруднить тестирование из-за глобального состояния.
- Нарушает принцип единственной ответственности, так как класс управляет своим созданием.
Реализация в Go с использованием sync.Once:
package singleton
import (
"fmt"
"sync"
)
// singleton представляет единственный экземпляр объекта.
type singleton struct {
value string
}
// once обеспечивает выполнение кода только один раз.
var once sync.Once
// instance хранит единственный экземпляр singleton.
var instance *singleton
// GetInstance возвращает единственный экземпляр singleton.
func GetInstance() *singleton {
once.Do(func() {
instance = &singleton{value: "Я единственный экземпляр!"}
fmt.Println("Создан единственный экземпляр singleton.")
})
return instance
}
// SomeMethod пример метода singleton.
func (s *singleton) SomeMethod() {
fmt.Println("Вызван метод единственного экземпляра:", s.value)
}