-
Notifications
You must be signed in to change notification settings - Fork 0
/
builder.go
51 lines (42 loc) · 1.42 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
//builder пакет є прикладом патерну Builder.
package Builder
// Builder реалізує інтерфейс будівельника
type Builder interface {
MakeHeader(str string)
MakeBody(str string)
MakeFooter(str string)
}
//Director реалізує менеджера
type Director struct {
builder Builder
}
// Construct говорить будівельнику, що робити і в якому порядку.
func (d *Director) Construct() {
d.builder.MakeHeader("Header")
d.builder.MakeBody("Body")
d.builder.MakeFooter("Footer")
}
//ConcreteBuilder реалізує інтерфейс Builder.
type ConcreteBuilder struct {
product *Product
}
//MakeHeader створює заголовок документа.
func (b *ConcreteBuilder) MakeHeader(str string) {
b.product.Content += "<header>" + str + "</header>"
}
//MakeBody будує тіло документа.
func (b *ConcreteBuilder) MakeBody(str string) {
b.product.Content += "<article>" + str + "</article>"
}
//MakeFooter створює нижній колонтитул документа.
func (b *ConcreteBuilder) MakeFooter(str string) {
b.product.Content += "<footer>" + str + "</footer>"
}
//Product імплементує складний об'єкт.
type Product struct {
Content string
}
//Show повертає готовий продукт(складний об'єкт)
func (p *Product) Show() string {
return p.Content
}