-
Notifications
You must be signed in to change notification settings - Fork 15
/
factory.go
149 lines (131 loc) · 2.16 KB
/
factory.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
/**
@author: Jason Pang
@desc:
@date: 2022/11/10
**/
package design
import "fmt"
/**
* @Author: Jason Pang
* @Description:
*/
type Life interface {
CheckParams() error //参数检查
Do() error //执行动作
}
/**
* @Author: Jason Pang
* @Description: 基类
*/
type BaseLife struct {
}
/**
* @Author: Jason Pang
* @Description: 参数检查
* @receiver c
* @return error
*/
func (c *BaseLife) CheckParams() error {
fmt.Println("通用参数检查")
return nil
}
/**
* @Author: Jason Pang
* @Description: 开始做饭
* @receiver c
* @return error
*/
func (c *BaseLife) Do() error {
fmt.Println("用水处理")
return nil
}
type Cook struct {
}
/**
* @Author: Jason Pang
* @Description: 做饭参数检查
* @receiver c
* @return error
*/
func (c *Cook) CheckParams() error {
fmt.Println("cook 检查参数,食材准备完毕")
return nil
}
/**
* @Author: Jason Pang
* @Description: 开始做饭
* @receiver c
* @return error
*/
func (c *Cook) Do() error {
fmt.Println("开始做饭")
return nil
}
type Eat struct {
}
/**
* @Author: Jason Pang
* @Description: 吃饭参数检查
* @receiver c
* @return error
*/
func (c *Eat) CheckParams() error {
fmt.Println("eat 检查参数,饭已做好,碗筷放好")
return nil
}
/**
* @Author: Jason Pang
* @Description: 开始吃饭
* @receiver c
* @return error
*/
func (c *Eat) Do() error {
fmt.Println("开始吃饭")
return nil
}
/**
* @Author: Jason Pang
* @Description: 洗碗
*/
type Wash struct {
BaseLife
}
type Mop struct {
BaseLife
}
func (c *Mop) CheckParams() error {
fmt.Println("mop 检查参数,拖把是否存在")
return nil
}
/**
* @Description: 简单工厂
*/
type Factory2 struct {
}
func (simple *Factory2) create(ext string) Life {
switch ext {
case "cook":
return &Cook{}
case "eat":
return &Eat{}
case "wash":
return &Wash{}
case "mop":
return &Mop{}
}
return nil
}
func EchoBeforeDo() {
fmt.Println("不想工作")
}
func factorymain() {
//简单工厂使用代码
fmt.Println("------------简单工厂")
factory := &Factory2{}
life := factory.create("mop")
if life != nil {
life.CheckParams()
EchoBeforeDo()
life.Do()
}
}