Какие знаешь паттерны проектирования

«Какие знаешь паттерны проектирования» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go часто используют следующие паттерны:

  1. Singleton - гарантирует единственный экземпляр:
type singleton struct{}
var instance *singleton
var once sync.Once

func GetInstance() *singleton {
    once.Do(func() {
        instance = &singleton{}
    })
    return instance
}
  1. Factory - создание объектов без указания конкретного типа:
type Product interface {
    Use() string
}

func NewProduct(t string) Product {
    switch t {
    case "A": return &ConcreteProductA{}
    case "B": return &ConcreteProductB{}
    }
    return nil
}
  1. Decorator - добавление функциональности:
type Component interface {
    Operation() string
}

type Decorator struct {
    component Component
}

func (d *Decorator) Operation() string {
    return "Decorated " + d.component.Operation()
}
  1. Observer - подписка на события:
type Observer interface {
    Update(string)
}

type Subject struct {
    observers []Observer
}

func (s *Subject) Notify(msg string) {
    for _, o := range s.observers {
        o.Update(msg)
    }
}

Также часто применяются: Strategy, Adapter, Facade, Builder. В Go многие паттерны реализуются проще благодаря интерфейсам и замыканиям.

Видео-ответы