【设计模式】第22节:行为型模式之“状态模式”
- IT业界
- 2025-08-14 23:48:02

一、简介
状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。不过,状态机的实现方式有多种,除了状态模式,比较常用的还有分支逻辑法和查表法。该模式允许对象内部状态改变使改变它的行为。
二、适用场景 行为随状态而改变条件、分支语句的替代者 三、UML类图 四、案例交通信号灯的红黄绿三色的变化。
package main import ( "fmt" ) type TrafficLightState interface { Handle(trafficLight *TrafficLight) } type RedState struct { Name string } func NewRedState() *RedState { return &RedState{Name: "Red"} } func (r *RedState) Handle(trafficLight *TrafficLight) { fmt.Println("Red light: Stopped") trafficLight.SetState(NewGreenState()) } type YellowState struct { Name string } func NewYellowState() *YellowState { return &YellowState{Name: "Yellow"} } func (y *YellowState) Handle(trafficLight *TrafficLight) { fmt.Println("Yellow light: Be prepared to stop") trafficLight.SetState(NewRedState()) } type GreenState struct { Name string } func NewGreenState() *GreenState { return &GreenState{Name: "Green"} } func (g *GreenState) Handle(trafficLight *TrafficLight) { fmt.Println("Green light: Go") trafficLight.SetState(NewYellowState()) } type TrafficLight struct { State TrafficLightState } func NewTrafficLight() *TrafficLight { return &TrafficLight{State: NewRedState()} } func (t *TrafficLight) SetState(state TrafficLightState) { t.State = state } func (t *TrafficLight) Change() { t.State.Handle(t) } func main() { trafficLight := NewTrafficLight() for i := 0; i < 10; i++ { trafficLight.Change() } }【设计模式】第22节:行为型模式之“状态模式”由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【设计模式】第22节:行为型模式之“状态模式””