Назад к вопросам
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)
}