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.

Revisions

  1. ndisuio created this gist Mar 15, 2022.
    79 changes: 79 additions & 0 deletions Builder
    Original 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",
    }
    }