状态模式

状态模式

状态接口

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()
}

posted @ 2022-10-17 14:45  理科土拨鼠  阅读(24)  评论(0)    收藏  举报