implemented builder pattern
This commit is contained in:
		
							
								
								
									
										99
									
								
								creational/builder/builder.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								creational/builder/builder.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,99 @@ | ||||
| package builder | ||||
|  | ||||
| type PersonalComputer struct { | ||||
| 	ramCap int | ||||
| 	hddCap int | ||||
| 	cpu    string | ||||
| 	os     string | ||||
| 	gpu    string | ||||
| } | ||||
|  | ||||
| type PCBuilder interface { | ||||
| 	SetRAM() PCBuilder | ||||
| 	SetHDD() PCBuilder | ||||
| 	SetCPU() PCBuilder | ||||
| 	SetOS() PCBuilder | ||||
| 	SetGPU() PCBuilder | ||||
| 	GetPC() PersonalComputer | ||||
| } | ||||
|  | ||||
| // Hoem edition pc builder | ||||
| type HomeEditionPCBuilder struct { | ||||
| 	pc PersonalComputer | ||||
| } | ||||
|  | ||||
| func (b *HomeEditionPCBuilder) SetRAM() PCBuilder { | ||||
| 	b.pc.ramCap = 4 | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *HomeEditionPCBuilder) SetHDD() PCBuilder { | ||||
| 	b.pc.hddCap = 500 | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *HomeEditionPCBuilder) SetCPU() PCBuilder { | ||||
| 	b.pc.cpu = "i3" | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *HomeEditionPCBuilder) SetOS() PCBuilder { | ||||
| 	b.pc.os = "Windows 7 Home Edition" | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *HomeEditionPCBuilder) SetGPU() PCBuilder { | ||||
| 	b.pc.gpu = "Intel Graphic Card" | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *HomeEditionPCBuilder) GetPC() PersonalComputer { | ||||
| 	return b.pc | ||||
| } | ||||
|  | ||||
| // Game edition pc builder | ||||
| type GameEditionPCBuilder struct { | ||||
| 	pc PersonalComputer | ||||
| } | ||||
|  | ||||
| func (b *GameEditionPCBuilder) SetRAM() PCBuilder { | ||||
| 	b.pc.ramCap = 16 | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *GameEditionPCBuilder) SetHDD() PCBuilder { | ||||
| 	b.pc.hddCap = 500 | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *GameEditionPCBuilder) SetCPU() PCBuilder { | ||||
| 	b.pc.cpu = "i7" | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *GameEditionPCBuilder) SetOS() PCBuilder { | ||||
| 	b.pc.os = "Windows 7 Ultimate" | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *GameEditionPCBuilder) SetGPU() PCBuilder { | ||||
| 	b.pc.gpu = "AMD Radeon X80" | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *GameEditionPCBuilder) GetPC() PersonalComputer { | ||||
| 	return b.pc | ||||
| } | ||||
|  | ||||
| //Manufacturer object which aware of build process for builder type | ||||
| type Manufacturer struct { | ||||
| 	b PCBuilder | ||||
| } | ||||
|  | ||||
| func (m *Manufacturer) SetBuilder(builder PCBuilder) { | ||||
| 	m.b = builder | ||||
| } | ||||
|  | ||||
| func (m *Manufacturer) ConstructPC() { | ||||
| 	m.b.SetCPU().SetHDD().SetRAM().SetGPU().SetOS() | ||||
| } | ||||
							
								
								
									
										33
									
								
								creational/builder/builder_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								creational/builder/builder_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| package builder | ||||
|  | ||||
| import "testing" | ||||
|  | ||||
| func TestManufacturer(t *testing.T)  { | ||||
| 	manufacturer := Manufacturer{} | ||||
|  | ||||
| 	homePCBuilder := &HomeEditionPCBuilder{} | ||||
| 	manufacturer.SetBuilder(homePCBuilder) | ||||
| 	manufacturer.ConstructPC() | ||||
| 	homePC := homePCBuilder.GetPC() | ||||
|  | ||||
| 	if homePC.cpu != "i3" { | ||||
| 		t.Errorf("Home edition PC cpu shoul be 'i3' but found %s", homePC.cpu) | ||||
| 	} | ||||
|  | ||||
| 	if homePC.gpu != "Intel Graphic Card" { | ||||
| 		t.Errorf("Home edition PC gpu shoul be 'Intel Graphic Card' but found %s", homePC.cpu) | ||||
| 	} | ||||
|  | ||||
| 	gamePCBuilder := &GameEditionPCBuilder{} | ||||
| 	manufacturer.SetBuilder(gamePCBuilder) | ||||
| 	manufacturer.ConstructPC() | ||||
| 	gamePC := gamePCBuilder.GetPC() | ||||
|  | ||||
| 	if gamePC.cpu != "i7" { | ||||
| 		t.Errorf("Game edition PC cpu shoul be 'i7' but found %s", gamePC.cpu) | ||||
| 	} | ||||
|  | ||||
| 	if gamePC.gpu != "AMD Radeon X80" { | ||||
| 		t.Errorf("Game edition PC gpu shoul be 'Intel Graphic Card' but found %s", gamePC.cpu) | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user