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