1
0
Fork 0
design-patterns/go/template_method/main.go

49 lines
834 B
Go

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("======== 模板方法模式结束 ========")
}