|
给一段策略模式代码
```
package main
import "fmt"
// 定义 RouteStrategy 为一个接口,包含 CalculateTime 方法
type RouteStrategy interface {
CalculateTime(origin, destination string) int
}
// 使用函数类型作为策略
type StrategyFunc func(origin, destination string) int
// 实现 RouteStrategy 接口的 CalculateTime 方法
func (sf StrategyFunc) CalculateTime(origin, destination string) int {
return sf(origin, destination)
}
// 实现三种策略:步行、骑行、驾车
func WalkStrategyFunc(origin, destination string) int {
// 假设固定耗时 30 分钟
return 30
}
func BikeStrategyFunc(origin, destination string) int {
// 假设固定耗时 15 分钟
return 15
}
func DriveStrategyFunc(origin, destination string) int {
// 假设固定耗时 10 分钟
return 10
}
// 路线规划器
type RoutePlanner struct {
strategy RouteStrategy
}
// 设置策略
func (rp *RoutePlanner) SetStrategy(strategy RouteStrategy) {
rp.strategy = strategy
}
// 估算出行时间
func (rp *RoutePlanner) EstimateTime(origin, destination string) int {
return rp.strategy.CalculateTime(origin, destination)
}
func main() {
planner := &RoutePlanner{}
// 使用步行策略
walkStrategy := StrategyFunc(WalkStrategyFunc)
planner.SetStrategy(walkStrategy)
fmt.Println("Walk Time:", planner.EstimateTime("Home", "School"))
// 使用骑行策略
bikeStrategy := StrategyFunc(BikeStrategyFunc)
planner.SetStrategy(bikeStrategy)
fmt.Println("Bike Time:", planner.EstimateTime("Home", "School"))
// 使用驾车策略
driveStrategy := StrategyFunc(DriveStrategyFunc)
planner.SetStrategy(driveStrategy)
fmt.Println("Drive Time:", planner.EstimateTime("Home", "Work"))
}
``` |