当前位置:首页 > 编程笔记 > 正文
已解决

【设计模式】第22节:行为型模式之“状态模式”

来自网友在路上 166866提问 提问时间:2023-11-02 13:50:46阅读次数: 66

最佳答案 问答题库668位专家为你答疑解惑

一、简介

状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。不过,状态机的实现方式有多种,除了状态模式,比较常用的还有分支逻辑法和查表法。该模式允许对象内部状态改变使改变它的行为。

二、适用场景

  • 行为随状态而改变
  • 条件、分支语句的替代者

三、UML类图

请添加图片描述

四、案例

交通信号灯的红黄绿三色的变化。

package mainimport ("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()}
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"【设计模式】第22节:行为型模式之“状态模式”":http://eshow365.cn/6-30233-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!