在此篇中,我们将练习实现建造者模式。
其中例子大致是菜鸟教程的例子翻版,此处采用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" }