在此篇中,我們將練習實現建造者模式。
其中例子大致是菜鳥教程的例子翻版,此處採用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" }