Files
notes_estom/Go/DesignPattern/state/state.go
2021-09-03 05:34:34 +08:00

112 lines
1.4 KiB
Go

/**
* @Author:zhoutao
* @Date:2020/12/12 下午2:16
* @Desc:
*/
package state
import "fmt"
//状态模式:用于分离 状态和行为
type Week interface {
Today()
Next(*DayContext)
}
//
func NewTodayContext() *DayContext {
return &DayContext{
today: &Sunday{},
}
}
type DayContext struct {
today Week
}
func (d *DayContext) Today() {
d.today.Today()
}
func (d *DayContext) Next() {
d.today.Next(d)
}
//sunday
type Sunday struct {
}
func (*Sunday) Today() {
fmt.Print("sunday\n")
}
func (*Sunday) Next(ctx *DayContext) {
ctx.today = &Monday{}
}
//Monday
type Monday struct {
}
func (*Monday) Today() {
fmt.Print("Monday\n")
}
func (*Monday) Next(ctx *DayContext) {
ctx.today = &Tuesday{}
}
//Tuesday
type Tuesday struct {
}
func (*Tuesday) Today() {
fmt.Print("Tuesday\n")
}
func (*Tuesday) Next(ctx *DayContext) {
ctx.today = &Wednesday{}
}
type Wednesday struct{}
func (*Wednesday) Today() {
fmt.Printf("Wednesday\n")
}
func (*Wednesday) Next(ctx *DayContext) {
ctx.today = &Thursday{}
}
type Thursday struct{}
func (*Thursday) Today() {
fmt.Printf("Thursday\n")
}
func (*Thursday) Next(ctx *DayContext) {
ctx.today = &Friday{}
}
type Friday struct{}
func (*Friday) Today() {
fmt.Printf("Friday\n")
}
func (*Friday) Next(ctx *DayContext) {
ctx.today = &Saturday{}
}
type Saturday struct{}
func (*Saturday) Today() {
fmt.Printf("Saturday\n")
}
func (*Saturday) Next(ctx *DayContext) {
ctx.today = &Sunday{}
}