Sobes.tech
Назад к вопросам
Junior — Middle
88

Какие функции выполняет контекст в паттерне состояния или команд?

Ответ от нейросети

sobes.tech AI

В паттернах «Состояние» (State) и «Команда» (Command) контекст выполняет роль управляющего объекта, который хранит текущее состояние или команду и взаимодействует с ними.

Для паттерна Состояние:

  • Контекст содержит ссылку на объект состояния, который определяет текущее поведение.
  • Делегирует вызовы методов состоянию, позволяя менять поведение динамически при смене состояния.
  • Инкапсулирует логику переключения между состояниями.

Для паттерна Команда:

  • Контекст может хранить и вызывать объекты команд.
  • Управляет очередью или историей команд (например, для отмены/повтора).
  • Отделяет отправителя команды от её исполнения.

Пример на Go для паттерна Состояние:

// State интерфейс
type State interface {
    Handle(c *Context)
}

// Context хранит текущее состояние
type Context struct {
    state State
}

func (c *Context) SetState(s State) {
    c.state = s
}

func (c *Context) Request() {
    c.state.Handle(c)
}

// Конкретное состояние
type ConcreteStateA struct{}
func (s *ConcreteStateA) Handle(c *Context) {
    fmt.Println("State A handling request")
    c.SetState(&ConcreteStateB{})
}

// Конкретное состояние
type ConcreteStateB struct{}
func (s *ConcreteStateB) Handle(c *Context) {
    fmt.Println("State B handling request")
    c.SetState(&ConcreteStateA{})
}

Контекст управляет состояниями и делегирует вызовы, обеспечивая гибкость поведения.