1
0
Fork 0
design-patterns/go/state/main.go

62 lines
1.0 KiB
Go

package main
import "fmt"
/*
实例:
一个任务状态机
*/
type Task struct {
state State
}
func (t *Task) SetState(state State) {
t.state = state
}
func (t *Task) Handle() {
t.state.Handle(t)
}
// 状态接口
type State interface {
Handle(t *Task)
}
// 具体状态 - 待处理
type PendingState struct{}
func (p *PendingState) Handle(t *Task) {
fmt.Println("任务待处理,开始处理任务...")
t.SetState(&InProgressState{})
}
// 具体状态 - 进行中
type InProgressState struct{}
func (i *InProgressState) Handle(t *Task) {
fmt.Println("任务处理中,完成任务...")
t.SetState(&CompletedState{})
}
// 具体状态 - 已完成
type CompletedState struct{}
func (c *CompletedState) Handle(t *Task) {
fmt.Println("任务已完成,无法再处理。")
}
func main() {
fmt.Println("============= 状态模式 =============")
task := &Task{state: &PendingState{}}
task.Handle()
task.Handle()
task.Handle()
fmt.Println()
fmt.Println("=========== 状态模式结束 ===========")
}