This repository has been archived on 2021-09-07. You can view files and clone it, but cannot push or open issues or pull requests.
2018-01-14 00:45:10 +04:00

56 lines
941 B
Go

package state
import (
"fmt"
)
type State interface {
executeState(c *Context)
}
type Context struct {
StepIndex int
StepName string
Current State
}
type StartState struct{}
func (s *StartState) executeState(c *Context) {
c.StepIndex = 1
c.StepName = "start"
c.Current = &StartState{}
}
type InprogressState struct{}
func (s *InprogressState) executeState(c *Context) {
c.StepIndex = 2
c.StepName = "inprogress"
c.Current = &InprogressState{}
}
type StopState struct{}
func (s *StopState) executeState(c *Context) {
c.StepIndex = 3
c.StepName = "stop"
c.Current = &StopState{}
}
func StateDemo() {
context := &Context{}
startState := &StartState{}
startState.executeState(context)
fmt.Println("state: ", context)
inprState := &InprogressState{}
inprState.executeState(context)
fmt.Println("state: ", context)
stopState := &StopState{}
stopState.executeState(context)
fmt.Println("state: ", context)
}