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