-
Notifications
You must be signed in to change notification settings - Fork 15
/
28mediator.go
155 lines (138 loc) · 2.55 KB
/
28mediator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/**
@author: Jason Pang
@desc:
@date: 2021/9/4
**/
package design
import "fmt"
/**
* @Author: Jason Pang
* @Description: 中介者接口
*/
type Mediator interface {
Process(colleague UIColleague)
}
/**
* @Author: Jason Pang
* @Description: 真正的中介者
*/
type UIMediator struct {
activate *ActivateColleague
evaluate *EvaluateColleague
text *TextColleague
}
/**
* @Author: Jason Pang
* @Description: 中介者大总管,处理所有事情
* @receiver u
*/
func (u *UIMediator) Process(colleague UIColleague) {
if colleague == u.activate { //如果是激活
u.evaluate.Show("试用内容隐藏")
u.text.Show("请输入激活码")
} else if colleague == u.evaluate { //如果是试用
u.activate.Show("激活内容隐藏")
u.text.Show("请出入激活时间")
}
}
/**
* @Author: Jason Pang
* @Description: Colleague接口
*/
type UIColleague interface {
Action()
}
/**
* @Author: Jason Pang
* @Description: 激活UI
*/
type ActivateColleague struct {
mediator Mediator
}
/**
* @Author: Jason Pang
* @Description: 激活触发的动作
* @receiver a
*/
func (a *ActivateColleague) Action() {
a.mediator.Process(a)
}
/**
* @Author: Jason Pang
* @Description: 激活UI显示内容
* @receiver e
* @param text
*/
func (e *ActivateColleague) Show(text string) {
fmt.Println(text)
}
/**
* @Author: Jason Pang
* @Description: 试用UI
*/
type EvaluateColleague struct {
mediator Mediator
}
/**
* @Author: Jason Pang
* @Description: 试用触发的动作
* @receiver e
*/
func (e *EvaluateColleague) Action() {
e.mediator.Process(e)
}
/**
* @Author: Jason Pang
* @Description: 试用UI显示内容
* @receiver e
* @param text
*/
func (e *EvaluateColleague) Show(text string) {
fmt.Println(text)
}
/**
* @Author: Jason Pang
* @Description: 文案UI
*/
type TextColleague struct {
mediator Mediator
}
/**
* @Author: Jason Pang
* @Description: 文案触发动作
* @receiver t
*/
func (t *TextColleague) Action() {
t.mediator.Process(t)
}
/**
* @Author: Jason Pang
* @Description: 文案显示内容
* @receiver t
* @param text
*/
func (t *TextColleague) Show(text string) {
fmt.Println(text)
}
func mediatorMain() {
//初始化
m := &UIMediator{}
activate := &ActivateColleague{
mediator: m,
}
evaluate := &EvaluateColleague{
mediator: m,
}
text := &TextColleague{
mediator: m,
}
m.activate = activate
m.evaluate = evaluate
m.text = text
//点击激活
fmt.Println("-----------------点击激活")
activate.Action()
//点击试用
fmt.Println("-----------------点击试用")
evaluate.Action()
}