Какие знаешь паттерны проектирования и какие применяешь в своей работе?
Ответ от нейросети
sobes.tech AI
Некоторые распространённые паттерны проектирования и их применение в Go:
-
Singleton — гарантирует, что класс имеет только один экземпляр. В Go часто реализуется через пакетные переменные и
sync.Once. -
Factory — создание объектов через фабричные функции, что удобно для инкапсуляции логики создания и выбора конкретных реализаций интерфейсов.
-
Decorator — добавление функциональности объектам динамически. В Go можно реализовать через обёртки функций или структур, реализующих тот же интерфейс.
-
Strategy — выбор алгоритма во время выполнения. В Go — передача функций или интерфейсов с разными реализациями.
-
Observer — подписка на события. В Go можно реализовать через каналы и горутины.
Пример фабрики в Go:
package main
type Animal interface {
Speak() string
}
type Dog struct{}
func (d Dog) Speak() string { return "Woof!" }
type Cat struct{}
func (c Cat) Speak() string { return "Meow!" }
func AnimalFactory(animalType string) Animal {
switch animalType {
case "dog":
return Dog{}
case "cat":
return Cat{}
default:
return nil
}
}
func main() {
a := AnimalFactory("dog")
println(a.Speak()) // Woof!
}
В работе я применяю паттерны, которые упрощают поддержку кода, делают его более читаемым и расширяемым, например, Factory для создания сервисов, Strategy для выбора алгоритмов и Decorator для добавления логирования или кэширования.