package main import "fmt" /* 实例: 汤宝宝炒西红柿鸡蛋。 */ // 抽象接口 type Dish interface { PrepareIngredients() Cook() Serve() } // 模板方法 func DoCooking(dish Dish) { fmt.Print("第一步:") dish.PrepareIngredients() fmt.Print("第二步:") dish.Cook() fmt.Print("第三步:") dish.Serve() } // 具体实现 type TomatoEggDish struct{} func (t *TomatoEggDish) PrepareIngredients() { fmt.Println("准备西红柿和鸡蛋;") } func (t *TomatoEggDish) Cook() { fmt.Println("炒西红柿和鸡蛋;") } func (t *TomatoEggDish) Serve() { fmt.Println("装盘,西红柿鸡蛋炒好了。") } func main() { fmt.Println("========== 模板方法模式 ==========") dish := &TomatoEggDish{} DoCooking(dish) fmt.Println() fmt.Println("======== 模板方法模式结束 ========") }