-
Notifications
You must be signed in to change notification settings - Fork 0
/
builder.go
95 lines (78 loc) · 1.73 KB
/
builder.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
package patterns
// BuildProcess interface
type BuildProcess interface {
SetColor() BuildProcess
SetTag() BuildProcess
GetUIProduct() UIProduct
}
// UIDirector struct
type UIDirector struct {
builder BuildProcess
}
// Construct method on UIDirector struct
func (f *UIDirector) Construct() {
f.builder.SetTag().SetColor()
}
// SetBuilder method on UIDirector struct
func (f *UIDirector) SetBuilder(b BuildProcess) {
f.builder = b
}
// UIProduct struct
type UIProduct struct {
Color string
Tag string
}
// ReactBuilder struct
type ReactBuilder struct {
v UIProduct
}
// SetColor method on BuildProcess struct
func (c *ReactBuilder) SetColor() BuildProcess {
c.v.Color = "Blue"
return c
}
// SetTag method on BuildProcess struct
func (c *ReactBuilder) SetTag() BuildProcess {
c.v.Tag = "React"
return c
}
// GetUIProduct method on UIProduct struct
func (c *ReactBuilder) GetUIProduct() UIProduct {
return c.v
}
// VueBuilder struct
type VueBuilder struct {
v UIProduct
}
// SetColor method on BuildProcess struct
func (b *VueBuilder) SetColor() BuildProcess {
b.v.Color = "Green"
return b
}
// SetTag method on BuildProcess struct
func (b *VueBuilder) SetTag() BuildProcess {
b.v.Tag = "Vue"
return b
}
// GetUIProduct method on UIProduct struct
func (b *VueBuilder) GetUIProduct() UIProduct {
return b.v
}
// AngularBuilder struct
type AngularBuilder struct {
v UIProduct
}
// SetColor method on BuildProcess struct
func (b *AngularBuilder) SetColor() BuildProcess {
b.v.Color = "Red"
return b
}
// SetTag method on BuildProcess struct
func (b *AngularBuilder) SetTag() BuildProcess {
b.v.Tag = "Angular"
return b
}
// GetUIProduct method on UIProduct struct
func (b *AngularBuilder) GetUIProduct() UIProduct {
return b.v
}