Skip to content

Instantly share code, notes, and snippets.

@ndisuio
Created March 15, 2022 18:20
Show Gist options
  • Select an option

  • Save ndisuio/7f9d6e76fcf93412e23b9ba3e8521153 to your computer and use it in GitHub Desktop.

Select an option

Save ndisuio/7f9d6e76fcf93412e23b9ba3e8521153 to your computer and use it in GitHub Desktop.
package main
import "fmt"
// Builder
type Computer struct {
CPU string
RAM int
MB string
}
type ComputerBuilderI interface {
CPU(val string) ComputerBuilderI
RAM(val int) ComputerBuilderI
MB(val string) ComputerBuilderI
Build() Computer
}
type computerBuilder struct {
cpu string
ram int
mb string
}
func NewComputerBuilder() ComputerBuilderI {
return computerBuilder{}
}
func (b computerBuilder) CPU(val string) ComputerBuilderI {
b.cpu = val
return b
}
func (b computerBuilder) RAM(val int) ComputerBuilderI {
b.ram = val
return b
}
func (b computerBuilder) MB(val string) ComputerBuilderI {
b.mb = val
return b
}
func (b computerBuilder) Build() Computer {
return Computer{
CPU: b.cpu,
RAM: b.ram,
MB: b.mb,
}
}
func main() {
computerBuilder := NewComputerBuilder()
computer := computerBuilder.CPU("core i3").RAM(8).MB("gigabyte").Build()
fmt.Println(computer)
officeCompBuilder := NewOfficeComputerBuilder()
officeComputer := officeCompBuilder.Build()
fmt.Println(officeComputer)
}
type officeCompBuilder struct {
computerBuilder
}
func NewOfficeComputerBuilder() ComputerBuilderI {
return officeCompBuilder{}
}
func (b officeCompBuilder) Build() Computer {
return Computer{
CPU: "intel pentium III",
RAM: 2,
MB: "asrock",
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment