状态模式
状态模式
状态接口
package state
type State interface {
On(*control)
Off(*control)
}
打开状态
package state
type OnState struct{}
func NewOnState() State {
return &OnState{}
}
func (o *OnState) On(ctr *control) {
fmt.Println("已经是打开状态,请执行其他操作!!")
}
func (o *OnState) Off(ctr *control) {
fmt.Println("关闭设备!")
ctr.SetState(NewOffState())
}
关闭状态
package state
type OffState struct{}
func NewOffState() State {
return &OffState{}
}
func (o *OffState) Off(ctr *control) {
fmt.Println("已经是关闭状态,请执行其他操作!!")
}
func (o *OffState) On(ctr *control) {
fmt.Println("打开设备!")
ctr.SetState(NewOnState())
}
电视遥控
package state
type control struct {
state State
}
func NewControl() *control {
return &control{}
}
func (c *control) SetState(state State) {
c.state = state
}
func (c *control) On() {
c.state.On(c)
}
func (c *control) Off() {
c.state.Off(c)
}
测试文件
package state
func TestState(t *testing.T) {
context := NewControl()
context.SetState(NewOffState())
context.On()
context.Off()
context.Off()
}

浙公网安备 33010602011771号