建造者模式-golang

在此篇中,我们将练习实现建造者模式。

其中例子大致是菜鸟教程的例子翻版,此处采用golang实现。对于具体介绍大家可以去菜鸟教程学习(http://www.runoob.com/design-pattern/builder-pattern.html)


package main

import "fmt"

func main() {
   menu := Menu{}
   HotDog := PackageItem{Name:"hotdog",Price:10.00}
   Coke := PackageItem{Name:"code",Price:20.00}
   m := Package{}
   m.Name = "组合1"
   m.Pi = append(m.Pi, HotDog)
   m.Pi = append(m.Pi, Coke)
   m.AllPrice()
   menu.P = append(menu.P,m)

   mm := Package{}
   mm.Name = "组合2"
   mm.Pi = append(mm.Pi, HotDog)
   mm.Pi = append(mm.Pi, HotDog)
   mm.Pi = append(mm.Pi, Coke)
   mm.AllPrice()
   menu.P = append(menu.P,mm)


   menu.Show()
}

//菜单
type Menu struct {
   P []Package
}

//菜单展示
func (m Menu) Show()  {
   for _,f := range m.P {
      fmt.Print(f.Name)
      fmt.Print(":")
      fmt.Println(f.Price)
      f.Show()
   }
}

//菜单的套餐
type Package struct {
   Name string
   Price float32
   Pi []PackageItem
}

//计算该套餐的总价格
func (p *Package) AllPrice()  {
   for _,f := range p.Pi {
      p.Price = p.Price + f.Price
   }
}

//展示该套餐的内容
func (m Package) Show()  {
   for _,f := range m.Pi {
      fmt.Print(f.Name)
      fmt.Print(":")
      fmt.Print(f.Price)
      fmt.Print(":")
      fmt.Println(f.Pake.Pake())
   }
}

//套餐的内容
type PackageItem struct {
   Name string
   Price float32
   Pake Wargger
}

//包装
type Wargger struct {
}

func (w Wargger) Pake() string {
   return "Wargger"
}




发布了48 篇原创文章 · 获赞 17 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/aixinaxc/article/details/79312568