状态模式

状态模式

状态接口

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  理科土拨鼠  阅读(23)  评论(0)    收藏  举报