Skip to content

Commit 15e7d5f

Browse files
committed
Implemented Template method pattern in Golang
1 parent f7bab58 commit 15e7d5f

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

Diff for: Behavioral/TemplateMethod/go/template_method.go

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"strings"
6+
)
7+
8+
type HouseBuilder interface {
9+
Build()
10+
buildFoundation()
11+
buildPillars()
12+
}
13+
14+
type BasicHouse struct {
15+
}
16+
17+
func (h *BasicHouse) Build() {
18+
h.buildFoundation()
19+
}
20+
21+
func (h *BasicHouse) buildFoundation() {
22+
fmt.Println("BasicHouse.buildFoundation()")
23+
}
24+
25+
func (h *BasicHouse) buildPillars() {
26+
fmt.Println("BasicHouse.buildPillars() with basic material")
27+
}
28+
29+
type HouseBuilderTemplate struct {
30+
template HouseBuilder
31+
}
32+
33+
func (c *HouseBuilderTemplate) Build() {
34+
c.template.buildFoundation()
35+
c.template.buildPillars()
36+
}
37+
38+
type LuxuryHouse struct {
39+
*BasicHouse
40+
}
41+
42+
func (c *LuxuryHouse) buildFoundation() {
43+
fmt.Println("LuxuryHouse.buildFoundation()")
44+
}
45+
46+
func (c *LuxuryHouse) buildPillars() {
47+
fmt.Println("LuxuryHouse.buildPillars() from concrete")
48+
}
49+
50+
type WoodenHouse struct {
51+
*BasicHouse
52+
}
53+
54+
func (c *WoodenHouse) buildFoundation() {
55+
fmt.Println("WoodenHouse.buildFoundation()")
56+
}
57+
58+
func (c *WoodenHouse) buildPillars() {
59+
fmt.Println("WoodenHouse.buildPillars() from wood")
60+
}
61+
62+
func main() {
63+
basicHouse := HouseBuilderTemplate{new(BasicHouse)}
64+
basicHouse.Build()
65+
fmt.Println(strings.Repeat("-", 50))
66+
67+
superHouse := HouseBuilderTemplate{new(WoodenHouse)}
68+
superHouse.Build()
69+
fmt.Println(strings.Repeat("-", 50))
70+
71+
luxury := HouseBuilderTemplate{new(LuxuryHouse)}
72+
luxury.Build()
73+
74+
// prints:
75+
// BasicHouse.buildFoundation()
76+
// BasicHouse.buildPillars() with basic material
77+
// --------------------------------------------------
78+
// WoodenHouse.buildFoundation()
79+
// WoodenHouse.buildPillars() from wood
80+
// --------------------------------------------------
81+
// LuxuryHouse.buildFoundation()
82+
// LuxuryHouse.buildPillars() from concrete
83+
}

0 commit comments

Comments
 (0)