File tree Expand file tree Collapse file tree 3 files changed +129
-0
lines changed Expand file tree Collapse file tree 3 files changed +129
-0
lines changed Original file line number Diff line number Diff line change
1
+ # 状态模式
2
+
3
+ 状态模式用于分离状态和行为。
Original file line number Diff line number Diff line change
1
+ package state
2
+
3
+ import "fmt"
4
+
5
+ type Week interface {
6
+ Today ()
7
+ Next (* DayContext )
8
+ }
9
+
10
+ type DayContext struct {
11
+ today Week
12
+ }
13
+
14
+ func NewDayContext () * DayContext {
15
+ return & DayContext {
16
+ today : & Sunday {},
17
+ }
18
+ }
19
+
20
+ func (d * DayContext ) Today () {
21
+ d .today .Today ()
22
+ }
23
+
24
+ func (d * DayContext ) Next () {
25
+ d .today .Next (d )
26
+ }
27
+
28
+ type Sunday struct {}
29
+
30
+ func (* Sunday ) Today () {
31
+ fmt .Printf ("Sunday\n " )
32
+ }
33
+
34
+ func (* Sunday ) Next (ctx * DayContext ) {
35
+ ctx .today = & Monday {}
36
+ }
37
+
38
+ type Monday struct {}
39
+
40
+ func (* Monday ) Today () {
41
+ fmt .Printf ("Monday\n " )
42
+ }
43
+
44
+ func (* Monday ) Next (ctx * DayContext ) {
45
+ ctx .today = & Tuesday {}
46
+ }
47
+
48
+ type Tuesday struct {}
49
+
50
+ func (* Tuesday ) Today () {
51
+ fmt .Printf ("Tuesday\n " )
52
+ }
53
+
54
+ func (* Tuesday ) Next (ctx * DayContext ) {
55
+ ctx .today = & Wednesday {}
56
+ }
57
+
58
+ type Wednesday struct {}
59
+
60
+ func (* Wednesday ) Today () {
61
+ fmt .Printf ("Wednesday\n " )
62
+ }
63
+
64
+ func (* Wednesday ) Next (ctx * DayContext ) {
65
+ ctx .today = & Thursday {}
66
+ }
67
+
68
+ type Thursday struct {}
69
+
70
+ func (* Thursday ) Today () {
71
+ fmt .Printf ("Thursday\n " )
72
+ }
73
+
74
+ func (* Thursday ) Next (ctx * DayContext ) {
75
+ ctx .today = & Friday {}
76
+ }
77
+
78
+ type Friday struct {}
79
+
80
+ func (* Friday ) Today () {
81
+ fmt .Printf ("Friday\n " )
82
+ }
83
+
84
+ func (* Friday ) Next (ctx * DayContext ) {
85
+ ctx .today = & Saturday {}
86
+ }
87
+
88
+ type Saturday struct {}
89
+
90
+ func (* Saturday ) Today () {
91
+ fmt .Printf ("Saturday\n " )
92
+ }
93
+
94
+ func (* Saturday ) Next (ctx * DayContext ) {
95
+ ctx .today = & Sunday {}
96
+ }
Original file line number Diff line number Diff line change
1
+ package state
2
+
3
+ func ExampleWeek () {
4
+ ctx := NewDayContext ()
5
+ ctx .Today ()
6
+ ctx .Next ()
7
+ ctx .Today ()
8
+ ctx .Next ()
9
+ ctx .Today ()
10
+ ctx .Next ()
11
+ ctx .Today ()
12
+ ctx .Next ()
13
+ ctx .Today ()
14
+ ctx .Next ()
15
+ ctx .Today ()
16
+ ctx .Next ()
17
+ ctx .Today ()
18
+ ctx .Next ()
19
+ ctx .Today ()
20
+ ctx .Next ()
21
+ // Output:
22
+ // Sunday
23
+ // Monday
24
+ // Tuesday
25
+ // Wednesday
26
+ // Thursday
27
+ // Friday
28
+ // Saturday
29
+ // Sunday
30
+ }
You can’t perform that action at this time.
0 commit comments