Created
March 15, 2022 18:20
-
-
Save ndisuio/7f9d6e76fcf93412e23b9ba3e8521153 to your computer and use it in GitHub Desktop.
Revisions
-
ndisuio created this gist
Mar 15, 2022 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,79 @@ 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", } }