Skip to content

Commit a254787

Browse files
committed
go for builder
1 parent 75279d9 commit a254787

32 files changed

+659
-20
lines changed

builder-pattern/go/src/Application.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package src
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
type Application struct {
8+
}
9+
10+
func (a *Application) MakeIPhone() {
11+
var director = new(Director)
12+
// 创建手机
13+
var phoneBuilder = new(PhoneBuilder)
14+
director.BuildIPhone(phoneBuilder)
15+
var iPhone = phoneBuilder.GetProduct()
16+
fmt.Println("iPhone:"+iPhone.GetName()+" | ", iPhone)
17+
18+
// 创建手册
19+
var manualBuilder = new(ManualBuilder)
20+
director.BuildIPhone(manualBuilder)
21+
var manual = manualBuilder.GetProduct()
22+
fmt.Println("manual:"+manual.GetName()+" | ", manual)
23+
}
24+
25+
func (a *Application) MakeHuaweiPhone() {
26+
var director = new(Director)
27+
28+
// 创建手机
29+
var phoneBuilder = new(PhoneBuilder)
30+
director.BuildHuaweiPhone(phoneBuilder)
31+
var huaweiPhone = phoneBuilder.GetProduct()
32+
fmt.Println(
33+
"huaweiPhone:"+huaweiPhone.GetName()+" | ", huaweiPhone)
34+
35+
// 创建手册
36+
var manualBuilder = new(ManualBuilder)
37+
director.BuildHuaweiPhone(manualBuilder)
38+
var manual = manualBuilder.GetProduct()
39+
fmt.Println("manual:"+manual.GetName()+" | ", manual)
40+
}

builder-pattern/go/src/Builder.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package src
2+
3+
// 建造者的基础接口
4+
type Builder interface {
5+
Reset()
6+
SetName(name string)
7+
SetScreen(size []int)
8+
SetGPU(no int)
9+
}

builder-pattern/go/src/Director.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package src
2+
3+
// 指挥调度类,负责利用建造者建造产品,隔离需求
4+
type Director struct {
5+
}
6+
7+
// 建造phone1
8+
func (c *Director) BuildIPhone(builder Builder) {
9+
builder.Reset()
10+
var screen = []int{120, 500}
11+
builder.SetName("iPhone")
12+
builder.SetScreen(screen)
13+
builder.SetGPU(100)
14+
}
15+
16+
// 建造phone2
17+
func (c *Director) BuildHuaweiPhone(builder Builder) {
18+
builder.Reset()
19+
var screen = []int{140, 600}
20+
builder.SetName("HuaweiPhone")
21+
builder.SetScreen(screen)
22+
builder.SetGPU(102)
23+
}
24+
25+
// 建造phone3
26+
func (c *Director) BuildMiPhone(builder Builder) {
27+
builder.Reset()
28+
var screen = []int{130, 550}
29+
builder.SetName("MiPhone")
30+
builder.SetScreen(screen)
31+
builder.SetGPU(103)
32+
}

builder-pattern/go/src/Manual.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package src
2+
3+
type Manual struct {
4+
name string
5+
screen []int
6+
gpuType int
7+
}
8+
9+
func (m *Manual) SetName(name string) {
10+
m.name = name
11+
}
12+
13+
func (m *Manual) GetName() string {
14+
return m.name
15+
}
16+
17+
func (m *Manual) SetScreen(screen []int) {
18+
m.screen = screen
19+
}
20+
21+
func (m *Manual) GetScreen() []int {
22+
return m.screen
23+
}
24+
25+
func (m *Manual) SetGpuType(gpuType int) {
26+
m.gpuType = gpuType
27+
}
28+
29+
func (m *Manual) GetGpuType() int {
30+
return m.gpuType
31+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package src
2+
3+
type ManualBuilder struct {
4+
manual *Manual
5+
}
6+
7+
func (m *ManualBuilder) Reset() {
8+
m.manual = new(Manual)
9+
}
10+
11+
func (m *ManualBuilder) SetName(name string) {
12+
m.manual.SetName(name)
13+
}
14+
15+
func (m *ManualBuilder) SetScreen(screen []int) {
16+
m.manual.SetScreen(screen)
17+
}
18+
19+
func (m *ManualBuilder) SetGPU(no int) {
20+
m.manual.SetGpuType(no)
21+
}
22+
23+
func (m *ManualBuilder) GetProduct() *Manual {
24+
return m.manual
25+
}

builder-pattern/go/src/Phone.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package src
2+
3+
type Phone struct {
4+
name string
5+
screen []int
6+
gpuType int
7+
}
8+
9+
func (p *Phone) SetName(name string) {
10+
p.name = name
11+
}
12+
13+
func (p *Phone) GetName() string {
14+
return p.name
15+
}
16+
17+
func (p *Phone) SetScreen(screen []int) {
18+
p.screen = screen
19+
}
20+
21+
func (p *Phone) GetScreen() []int {
22+
return p.screen
23+
}
24+
25+
func (p *Phone) SetGpuType(gpuType int) {
26+
p.gpuType = gpuType
27+
}
28+
29+
func (p *Phone) GetGpuType() int {
30+
return p.gpuType
31+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package src
2+
3+
type PhoneBuilder struct {
4+
phone *Phone
5+
}
6+
7+
func (p *PhoneBuilder) Reset() {
8+
p.phone = new(Phone)
9+
}
10+
11+
func (p *PhoneBuilder) SetName(name string) {
12+
p.phone.SetName(name)
13+
}
14+
15+
func (p *PhoneBuilder) SetScreen(screen []int) {
16+
p.phone.SetScreen(screen)
17+
}
18+
19+
func (p *PhoneBuilder) SetGPU(no int) {
20+
p.phone.SetGpuType(no)
21+
}
22+
23+
func (p *PhoneBuilder) GetProduct() *Phone {
24+
return p.phone
25+
}

builder-pattern/go/src/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module src
2+
3+
go 1.15

builder-pattern/go/test/test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
6+
"../src"
7+
)
8+
9+
// main包下的main入口方法
10+
func main() {
11+
fmt.Println("test start:")
12+
/**
13+
* 建造者模式是使用多个简单的对象一步一步构建出一个复杂的对象来。
14+
* 分为主管类和建造这类,主管类负责具体指挥调度,建造负责具体实施。
15+
* 主管类通过一步一步调用各种建造者实现复杂对象。
16+
*/
17+
var Application = &src.Application{}
18+
Application.MakeIPhone()
19+
20+
Application.MakeHuaweiPhone()
21+
22+
// *********************** 分割线 ******************************************/
23+
24+
// 声明指挥者
25+
var director = new(src.Director)
26+
// 创建手机
27+
var phoneBuilder = new(src.PhoneBuilder)
28+
director.BuildMiPhone(phoneBuilder)
29+
var miPhone = phoneBuilder.GetProduct()
30+
fmt.Println("miPhone:"+miPhone.GetName()+" | ", miPhone)
31+
// 创建手册
32+
var manualBuilder = new(src.ManualBuilder)
33+
director.BuildMiPhone(manualBuilder)
34+
var manual = manualBuilder.GetProduct()
35+
fmt.Println("manual:"+manual.GetName()+" | ", manual)
36+
}
37+
38+
/**
39+
jarry@jarrys-MacBook-Pro go % go build src/*.go
40+
jarry@jarrys-MacBook-Pro go % go run test/test.go
41+
test start:
42+
iPhone:iPhone | &{iPhone [120 500] 100}
43+
manual:iPhone | &{iPhone [120 500] 100}
44+
huaweiPhone:HuaweiPhone | &{HuaweiPhone [140 600] 102}
45+
manual:HuaweiPhone | &{HuaweiPhone [140 600] 102}
46+
miPhone:MiPhone | &{MiPhone [130 550] 103}
47+
manual:MiPhone | &{MiPhone [130 550] 103}
48+
*/

builder-pattern/java/src/Manual.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ public String getName() {
1515
return this.name;
1616
}
1717

18-
public void setScreen(Integer[] size) {
19-
this.screen = size;
18+
public void setScreen(Integer[] screen) {
19+
this.screen = screen;
2020
}
2121

2222
public Integer[] getScreen() {
@@ -38,4 +38,9 @@ public void setPages(Integer pages) {
3838
public Integer getPages() {
3939
return this.pages;
4040
}
41+
42+
public String toString() {
43+
return "[name=" + name + ", screen=" + screen.toString() + ", gpuType=" + gpuType + "]";
44+
}
45+
4146
}

builder-pattern/java/src/Phone.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public String getName() {
1414
return this.name;
1515
}
1616

17-
public void setScreen(Integer[] size) {
18-
this.screen = size;
17+
public void setScreen(Integer[] screen) {
18+
this.screen = screen;
1919
}
2020

2121
public Integer[] getScreen() {
@@ -30,4 +30,8 @@ public Integer getGpuType() {
3030
return this.gpuType;
3131
}
3232

33+
public String toString() {
34+
return "[name=" + name + ", screen=" + screen.toString() + ", gpuType=" + gpuType + "]";
35+
}
36+
3337
}

builder-pattern/java/test/Test.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,14 @@ public static void main(String[] args) {
4949
* jarry@jarrys-MacBook-Pro java % javac test/Test.java
5050
* jarry@jarrys-MacBook-Pro java % java test/Test
5151
* test start:
52-
* SingleObject::run()
53-
* SingletonLazy::run()
54-
* SingletonSafe::run()
55-
* SingletonInner::run()
52+
* iPhone:iPhone | [name=iPhone, screen=[Ljava.lang.Integer;@7e9e5f8a,
53+
* gpuType=100]
54+
* manual:iPhone | [name=iPhone, screen=[Ljava.lang.Integer;@4554617c,
55+
* gpuType=100]
56+
* huaweiPhone:HuaweiPhone | [name=HuaweiPhone,
57+
* screen=[Ljava.lang.Integer;@74a14482, gpuType=102]
58+
* manual:HuaweiPhone | [name=HuaweiPhone, screen=[Ljava.lang.Integer;@1540e19d,
59+
* gpuType=102]
60+
* miPhone:MiPhone | 103
61+
* manual:MiPhone | 103
5662
*/

builder-pattern/js/src/Manual.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export class Manual {
1414
return this.name
1515
}
1616

17-
setScreen(size) {
18-
this.screen = size
17+
setScreen(screen) {
18+
this.screen = screen
1919
}
2020

2121
getScreen() {

builder-pattern/js/src/Phone.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export class Phone {
1414
return this.name
1515
}
1616

17-
setScreen(size) {
18-
this.screen = size
17+
setScreen(screen) {
18+
this.screen = screen
1919
}
2020

2121
getScreen() {

builder-pattern/python/src/Manual.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ def setName(self, name):
1818
def getName(self):
1919
return self.name
2020

21-
def setScreen(self, size):
22-
self.screen = size
21+
def setScreen(self, screen):
22+
self.screen = screen
2323

2424
def getScreen(self):
2525
return self.screen

builder-pattern/python/src/Phone.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ def setName(self, name):
1818
def getName(self):
1919
return self.name
2020

21-
def setScreen(self, size):
22-
self.screen = size
21+
def setScreen(self, screen):
22+
self.screen = screen
2323

2424
def getScreen(self):
2525
return self.screen

builder-pattern/ts/src/Manual.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ export class Manual {
1818
return this.name
1919
}
2020

21-
setScreen(size: number[]) {
22-
this.screen = size
21+
setScreen(screen: number[]) {
22+
this.screen = screen
2323
}
2424

2525
getScreen() {

builder-pattern/ts/src/Phone.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ export class Phone {
1818
return this.name
1919
}
2020

21-
setScreen(size: number[]) {
22-
this.screen = size
21+
setScreen(screen: number[]) {
22+
this.screen = screen
2323
}
2424

2525
getScreen() {

0 commit comments

Comments
 (0)