Назад к вопросам
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{})
}
Контекст управляет состояниями и делегирует вызовы, обеспечивая гибкость поведения.