实现状态模式示例,添加任务、状态及具体状态类,增强代码可读性
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
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("=========== 状态模式结束 ===========")
|
||||
}
|
||||
Reference in New Issue
Block a user