implemented state pattern
This commit is contained in:
55
behavioral/state/state.go
Normal file
55
behavioral/state/state.go
Normal file
@@ -0,0 +1,55 @@
|
||||
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)
|
||||
}
|
Reference in New Issue
Block a user