62 lines
1.0 KiB
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("=========== 状态模式结束 ===========")
|
|
}
|