建造者模式-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"
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章